过期策略
设置了一个key,有效时间为10s,那么在10s后这个key会立即被删除吗
key不会在10s后立即被删除,redis会通过定期删除+惰性删除将key删除
定期删除
redis默认每隔100ms对设置了过期时间的key进行查询,如果过期了就删除。这里不是对全量的key进行查询,对于未被删除的过期key通过惰性删除进行删除
惰性删除
在获取某个key的时候,会判断该key是否过期,如果过期了就会进行删除
内存淘汰
redis可用内存为10g,此时内存已满且key还在过期时间之内,会怎么样
redis可以通过设置内存淘汰策略淘汰部分内存,可通过参数config set maxmemory-policy {policy}
- noeviction(默认策略):当没有足够容量写入新数据时报错
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,不常用
- volatile-lru:根据lru算法删除设置了超时属性的key,直到腾出足够空间为止,如果没有课删除的对象,回退到noeviction
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
- volatile-ttl:删除最近要过期的数据
