一、内存到达最大限制移除策略
LRU: Least Recently Used 最少最近使用 (从时间跨度上来,访问时间在最早的那个优先剔除)访问时间最早的优先剔除
LFU: Least Frequently Used 访问次数最少的优先剔除。
1.volatile-lru -> Evict using approximated LRU among the keys with an expire set. 仅对设置了过期时间的键采取LRU
淘汰
2.allkeys-lru -> Evict any key using approximated LRU. 对所有的键都采取LRU
淘汰,当预期请求符合一个幂次分布(二八法则等),比如一部分的子集元素比其它其它元素被访问的更多时,可以选择这个策略。
3.volatile-lfu -> Evict using approximated LFU among the keys with an expire set. 对有过期时间的key采用LFU
淘汰算法
4.allkeys-lfu -> Evict any key using approximated LFU. 对全部key采用LFU
淘汰算法
5.volatile-random -> Remove a random key among the ones with an expire set. 随机回收设置过期时间的键
6.allkeys-random -> Remove a random key, any key. 随机回收所有的键 。循环连续的访问所有的键时,或者预期请求分布平均(所有元素被访问的概率都差不多)
7.volatile-ttl -> Remove the key with the nearest expire time (minor TTL)。 仅淘汰设置了过期时间的键---淘汰生存时间TTL(Time To Live)
更小的键
8.noeviction -> Don't evict anything, just return an error on write operations. 如果缓存数据超过了maxmemory
限定值,并且客户端正在执行的命令(大部分的写入指令,但DEL和几个指令例外)会导致内存分配,则向客户端返回错误响应
二、设置redis.conf配置文件最大使用内存和移除策略
1.maxmemory
: 配置Redis
存储数据时指定限制的内存大小,比如100m
。当缓存消耗的内存超过这个数值时, 将触发数据淘汰。该数据配置为0时,表示缓存的数据量没有限制, 即LRU功能不生效。64位的系统默认值为0,32位的系统默认内存限制为3GB
2.maxmemory_policy
: 触发数据淘汰后的淘汰策略
3.maxmemory_samples
: 随机采样的精度,也就是随即取出key的数目。该数值配置越大, 越接近于真实的LRU算法,但是数值越大,相应消耗也变高,对性能有一定影响,样本值默认为5。