Redis的内存回收策略

Redis的内存回收策略

Redis的默认回收策略为:maxmemory-policy noeviction

1. volatile-lru -> remove the key with an expire set using an LRU algorithm

  采用最近最少的淘汰策略,Redis将回收那些(设置了超时时间的)键值对

2. allkeys-lru -> remove any key according to the LRU algorithm

  采用淘汰最少使用的策略,Redis将对所有的键值对采用最近使用最少的淘汰策略

3. volatile-random -> remove a random key with an expire set

  采用随机淘汰策略删除(设置了超时时间的)键值对

4. allkeys-random -> remove a random key, any key

  采用随机淘汰策略删除所有的键值对,不常用

5. volatile-ttl -> remove the key with the nearest expire time (minor TTL)

  采用删除即将过期的键值对策略

6. noeviction -> don't expire at all, just return an error on write operations

  不淘汰任何键值对,当内存已满时,Redis将只能读不能写

补充

  lru:least recently used;最近使用最少
  lfu:Least Frequently Used;Redis4.0里面新加的一种淘汰策略(分为volatile-lfu和allkeys-lfu),根据key的最近被访问的频率进行淘汰,很少被访问的优先被淘汰,被访问的多的则被留下来
  ttl:Time to Live存活时间
  这两种算法都不是很精确的算法,而是一个近似的算法(只从随机样本中进行lru淘汰,样本大小可以通过maxmemory-samples参数设置)

Redis的key过期删除策略

Redis提供了四个命令来设置过期时间(生存时间)。

  • EXPIRE :表示将键 key 的生存时间设置为 ttl 秒。
  • PEXPIRE :表示将键 key 的生存时间设置为 ttl 毫秒。
  • EXPIREAT :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳。
  • PEXPIREAT :表示将键 key 的生存时间设置为 timestamp 所指定的毫秒数时间戳。

在Redis内部实现中,前面三个设置过期时间的命令最后都会转换成最后一个PEXPIREAT 命令来完成。
PERSIST :表示将key的过期时间移除。
TTL :以秒的单位返回键 key 的剩余生存时间。
PTTL :以毫秒的单位返回键 key 的剩余生存时间。

Redis删除key有三种方式

  • 定时删除:在设置某个key 的过期时间同时,我们创建一个定时器,让定时器在该过期时间到来时,立即执行对其进行删除的操作;
  • 惰性删除:设置该key 过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key;
  • 定期删除:每隔一段时间,我们就对一些key进行检查,删除里面过期的key。

Redis的过期删除策略是:惰性删除和定期删除两种策略配合使用
定期删除的运行频率,每秒运行10次,可在配置文件redis.conf中设置:hz 10

posted @ 2020-06-14 18:29  Abserver  阅读(371)  评论(0)    收藏  举报