Redis 缓存过期机制
- (主动)定期删除
- (被动)惰性删除
定期删除
定期删除就是redis会定期去抽查缓存是否过期,默认1秒钟10次(可自己配置),如果过期就会自动删除,删除后就不可访问。
# redis.conf
# 设置自动检查数量
hz 10
惰性删除
惰性删除是指客户端请求的时候,可能会请求到一个过期的key,这时redis会去检查这个key是否过期,如果过期就会删除,这种策略对CPU比较友好,不会占用过多的CPU,缺点就是内存会被一直占用。
以上两种策略只针对设置了过期时间的key生效。
内存淘汰管理机制
计算机的内存是有限的,redis自身带有内存管理机制(memory management)。 可以在配置文件内设置一个阀值(maxmemory),如果超过了这个阀值,redis会自动去清理,会清理那些没有设置过期时间的数据。
- noeviction (默认)
- 内存满了之后不允许继续写入
- volatile-lru
- 针对时间,选择时间最少的去清理
- allkeys-lru
- 针对时间选择key去清理,任何key都有可能被清理掉
- volatile-lfu
- 针对设置过缓存时间的,在这些缓存里面清理较少使用的数据
- allkeys-lfu (推荐)
- 当内存满了之后,有新的key需要写入时,他会清理那些不经常使用的缓存清理掉
- volatile-random
- 针对设置了过期时间的缓存,随机清理掉,任何key 都可能删除
- allkeys-random
- 随机删除,任何的key都有可能删除掉
- volatile-ttl
- 设置了过期时间的,即将要过期的优先淘汰
LRU 针对时间的,使用最少 LFU 针对动作的,使用最少