Skip to content

一、 数据淘汰策略

redis.conf 中 展示如下

config
# The default is:
# maxmemory-policy noeviction
  • 数据的淘汰策略: 当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略

  • Redis支持8种不同策略来选择要删除的key:

    • noeviction: 不淘汰任何key,但是内存满时不允许写入新数据默认就是这种策略
    • 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算法进行淘汰

allkeys/volatile-lru (访问时间) 策略

例如: key1是在3s之前访问的, key2是在9s之前访问的,删除的就是key2

  • LRU(Least Recently Used): 最近最少使用,用当前时间减去最后一次访问时间,这个值越大淘汰优先级越高

allkeys/volatile-lfu (访问频率) 策略

例如: key1最近5s访问了4次, key2最近5s访问了9次,删除的就是key1

  • LFU(Least Frequently Used): 最少频率使用。会统计每个key自访问频率,值越小淘汰优先级越高

二、不同场景的使用

  • 使用 allkeys-lru 策略
  • 使用 allkeys-random策略: 随机选择淘汰。
  • 可以使用 volatile-lru 策略, 同时置顶数据不设置过期时间,这些数据就一直不被删除, 会淘汰其他设置过期时间的数据。
  • 可以使用 allkeys-lfuvolatile-lfu 策略