11. redis的内存淘汰策略
redis5.0前提供了6种,redis5.0之后提供了8种
策略 | 概述 |
---|---|
volatile-lru | 从已设置过期时间的数据中挑选最近最少使用的数据淘汰,没有设置过期时间的数据不会被淘汰 |
volatile-ttl | 从已设置过期时间的数据中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰 |
volatile-random | 从已设置过期时间的数据中任意选择数据淘汰 |
volatile-lfu | 从已设置过期时间的数据中挑选使用频率最低的数据淘汰 |
allkeys-lru | 面向所有的key,挑选最近最少使用的数据淘汰 |
allkeys-lfu | 面向所有的key,挑选使用频率最低的数据淘汰 |
allkeys-random | 面向所有的key,任意选择数据淘汰 |
no-enviction(驱逐) | 禁止驱逐数据,默认策略。当内存不足又要插入新数据时,新写入操作报错 |
12 redis的键删除策略
redis默认采用定期+惰性删除策略
- 定时删除
在设置键的过期时间的同时,设置一个定时器,键过期,定时间马上把该键删除(对内存友好,因为及时清除过期键,节省空间;对CPU不友好,如果过期键很多,删除操作会消耗过多资源)
- 惰性删除
key过期后不做处理,仍留在内存中。当有命令操作这个key时,检查这个key是否过期,过期则删除,否则返回key对应数据(对CPU友好,只有读取key时发现其过期才删除;对内存不友好,过期键占用内存空间)
- 定期删除
redis数据库默认每隔100ms随机抽取一些设置了过期时间的key进行检测,过期则删除