redis缓存过期8种淘汰策略

概述

缓存,不是存储,无法保证以前设置的缓存绝对存在。因为缓存容量是有上限的,即使set值的时候不设置过期时间,在内存不够的时候,会根据内存淘汰策略删除一些缓存

过期键删除策略

  • 惰性删除:过期的key不会马上删除,还会占用着内存。 当查询这个key时,redis会检查key是否过期,如果过期了就会删除,返回空。

  • 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。

  • 开启LRU功能来自动淘汰一些键值对

LRU、LFU算法

缓存淘汰算法LRU、LFU、FIFO

LRU配置参数

Redis配置中和LRU有关的有三个:

  • maxmemory: 配置Redis存储数据时指定限制的内存大小,比如100m。当缓存消耗的内存超过这个数值时, 将触发数据淘汰。该数据配置为0时,表示缓存的数据量没有限制, 即LRU功能不生效。64位的系统默认值为0,32位的系统默认内存限制为3GB

  • maxmemory-policy: 淘汰策略,见下面详细介绍

  • maxmemory-samples: 随机采样的精度,也就是随即取出key的数目。该数值配置越大, 越接近于真实的LRU算法,但是数值越大,相应消耗也变高,对性能有一定影响,样本值默认为5。一般设置3-7

maxmemory-policy 淘汰策略

  • noeviction:永不过期,默认策略。如果缓存数据超过了maxmemory限定值,并且客户端正在执行的命令(大部分的写入指令,但DEL和几个指令例外)会导致内存分配,则向客户端返回错误响应

  • allkeys-lru: 对所有的键都采取LRU淘汰,即:移除最近最少使用的key

  • volatile-lru: 仅对设置过期时间的key采取LRU淘汰

  • volatile-ttl: 在设置了过期时间的key中,删除快要过期的key

  • volatile-lfu:仅对设置过期时间的key采用LFU淘汰算法

  • allkeys-lfu:对全部key采用LFU淘汰算法

  • allkeys-random: 随机回收所有的key,不建议使用

  • volatile-random: 随机回收设置过期时间的key,不建议使用

LFU配置参数

还有2个配置可以调整LFU算法:

lfu-log-factor 10
lfu-decay-time 1

感谢:
https://www.cnblogs.com/linxiyue/p/10955533.html
https://www.cnblogs.com/linxiyue/p/10945216.html


原文出处:/show_1EF5nwc393bJ.html