Redis是怎么删除过期key的
1.惰性删除
当一些key过期了,Redis不会主动去删除,只有当用户访问这个key时,发现过期了才会删除
2.定期删除
定期抽取部分key,判断是否过期,如果过期就删除,每次遍历20个key
(1)SLOW模式默认频率为每秒10次,每次不超过25ms
(2)FAST删除频率不固定,删除间隔不少于2ms,每次耗时不超过1ms
如果key的数量过多,同时时间到了还未删除,导致内存占用过多怎么办
Redis内存淘汰策略
通过在Redis.config中设置maxmemory-policy的值来改变策略
- noevitction:不淘汰任何key,但是内存满了不允许写入新的数据,写数据被阻塞,Redis默认策略
- volatile-ttl:对设置TTL的key,比较key的剩余TTL的值,TTL越小越被先淘汰
- allkeys-random:对全体的key随机进行淘汰
- volatile-random:对设置了TTL的key随机淘汰
- allkeys-lru:对全体key,基于lru算法进行淘汰
- volatile-lru:对设置了TTL的key,基于lru算法淘汰
- allkeys-lfu:对全体key,基于lfu算法进行淘汰
- volatile-lfu:对设置了TTL的key,基于lfu算法淘汰
当Redis中 的内存超过了maxmemory,会触发Redis内存淘汰策略