概述
缓存,不是存储,无法保证以前设置的缓存绝对存在。因为缓存容量是有上限的,即使set值的时候不设置过期时间,在内存不够的时候,会根据内存淘汰策略删除一些缓存
过期键删除策略
惰性删除:过期的key不会马上删除,还会占用着内存。 当查询这个key时,redis会检查key是否过期,如果过期了就会删除,返回空。
定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。
开启LRU功能来自动淘汰一些键值对
LRU、LFU算法
LRU配置参数
Redis配置中和LRU有关的有三个:
maxmemory: 配置Redis存储数据时指定限制的内存大小,比如100m。当缓存消耗的内存超过这个数值时, 将触发数据淘汰。该数据配置为0时,表示缓存的数据量没有限制, 即LRU功能不生效。64位的系统默认值为0,32位的系统默认内存限制为3GBmaxmemory-policy: 淘汰策略,见下面详细介绍maxmemory-samples: 随机采样的精度,也就是随即取出key的数目。该数值配置越大, 越接近于真实的LRU算法,但是数值越大,相应消耗也变高,对性能有一定影响,样本值默认为5。一般设置3-7
maxmemory-policy 淘汰策略
noeviction:永不过期,默认策略。如果缓存数据超过了maxmemory限定值,并且客户端正在执行的命令(大部分的写入指令,但DEL和几个指令例外)会导致内存分配,则向客户端返回错误响应allkeys-lru: 对所有的键都采取LRU淘汰,即:移除最近最少使用的keyvolatile-lru: 仅对设置过期时间的key采取LRU淘汰volatile-ttl: 在设置了过期时间的key中,删除快要过期的keyvolatile-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