【Redis运维】Redis过期数据淘汰策略

TangLu Redis 2021-11-24 1142 0

一、Redis如何处理过期数据

当Redis中存放的数据过期后,Redis并不会立即删除数据,而是等新请求读写该数据时进行一次检查,如果发现数据已过期就删除。这样可以尽量减少删除操作对CPU资源的使用,对于用不到的数据就不再浪费时间进行检查和删除了,这种过期数据的处理方式叫做惰性删除。由于该方式会导致大量过期数据留存,所以Redis还会使用定期删除策略,每隔一段时间(默认 100ms)随机选出一定数量的数据,然后把其中过期的数据删除。


二、Redis过期数据淘汰策略

对于过期数据的淘汰策略分为了多种,以下是该选项常用值含义:

· noeviction:Redis过期数据默认淘汰策略,对于过期数据不进行淘汰处理,而堆积到最大可用内存阈值后客户端将返回command not allowed when used memory > 'maxmemory'的错误

· volatile-random:随机删除设有过期时间的key

· volatile-ttl:优先淘汰设有过期并且即将过期的key

· volatile-lru:从所有设置了过期时间的键值中淘汰最长时间未使用的Key,即保留最近访问过的数据。但是会存在一个很久没有被用到的Key因为最近被访问了一次而不被淘汰的问题。

· volatile-lfu优先保留访问次数最频繁的数据(4.0+版本支持)

· allkeys-lru:LRU算法是4.0之后的新算法,根据总访问次数来淘汰数据,解决了偶尔被访问一次之后数据就不会被淘汰的问题

· allkeys-random:随机在所有key中进行删除


三、Redis过期策略配置

要设置过期数据淘汰策略的话只需要修改maxmemory-policy变量的值即可

CONFIG GET maxmemory-policy  #查看当前过期策略
CONFIG SET maxmemory-policy volatile-lfu  #设置过期策略
CONFIG REWRITE  #写入配置文件


评论