Redis 缓存过期处理与内存淘汰机制
缓存过期处理
-
(主动)定时删除
定时随机的检查过期的key,如果过期则清理删除。
# 默认每秒钟10次,把这个设置的越大意味着占用的CPU也就越多 hz 10
-
(被动)惰性删除
当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对 CPU 比较友好,不会有太多的损耗,但是内存占用会比较高。
内存淘汰机制
-
maxmemory :当内存已使用率到达配置值,则开始清理缓存
如果没有设置maxmemory,将导致Redis在达到堆限制时以内存不足异常终止。
在设置了maxmemory之后,当内存使用达到maxmemory时,Redis将使用maxmemory-policy指定的策略对缓存进行删除。
# 当内存已使用值达到 maxmemory,开始清理缓存 # 单位:bytes(字节),123000000Byte ≈ 117.3M maxmemory 123000000 maxmemory-policy 缓存淘汰策略值枚举: # volatile开头的策略针对设置了过期时间的key # allkeys开头的策略针对内存中所有的key # noeviction:旧缓存永不过期,新缓存设置不了,返回错误 # allkeys-lru:清除最少用的旧缓存,然后保存新的缓存(推荐使用) # allkeys-random:在所有的缓存中随机删除(不推荐) # volatile-lru:在那些设置了expire过期时间的缓存中,清除最少用的旧缓存,然后保存新的缓存 # volatile-random:在那些设置了expire过期时间的缓存中,随机删除缓存 * volatile-ttl:在那些设置了expire过期时间的缓存中,删除即将过期的