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 针对动作的,使用最少