【Redis运维】Redis过期数据淘汰策略
一、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 #写入配置文件
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论