一.简介
8种内存淘汰策略:当 Redis 达到最大内存限制时,Redis会确切地使用配置好的最大内存策略指令来执行。相关策略如下:
1.noeviction(默认策略): 不会删除任何数据,拒绝所有写入操作并返回客户端错误消息(error)OOM command not allowed when used memory,此时 Redis 只响应删和读操作;
2.allkeys-lru: 从所有 key 中使用 LRU 算法进行淘汰(LRU 算法:最近最少使用算法);
3.allkeys-lfu: 从所有 key 中使用 LFU 算法进行淘汰(LFU 算法:最不常用算法,根据使用频率计算);
4.volatile-lru: 从设置了过期时间的 key 中使用 LRU 算法进行淘汰;
5.volatile-lfu: 从设置了过期时间的 key 中使用 LFU 算法进行淘汰;
6.allkeys-random: 从所有 key 中随机淘汰数据;
7.volatile-random: 从设置了过期时间的 key 中随机淘汰数据;
8.volatile-ttl: 在设置了过期时间的key中,淘汰过期时间剩余最短的。
二.如何选择使用哪种淘汰策略
根据应用程序的访问模式,选择正确的淘汰策略很重要,但是你可以在程序运行时重新配置策略,并使用 Redis 的 info 命令 输出来监控缓存未命中和命中的数量,以调整设置。
1.使用 allkeys-lru 策略场景:
(1)当你期望元素的子集将比其他元素更频繁地被访问时,比如幂律分布,20%的数据占有80%的使用次数;
(2)当你不确定使用哪种策略时。
2.使用 allkeys-random 策略场景:
(1)当你有一个循环访问,其中所有 key 进行会被连续地访问;
(2)当你希望所有 key 的分布比较均匀。
3.使用 volatile-ttl 策略场景:
(1)当你大部分缓存都设有不同的 ttl 值,向 Redis 提供过期候选的提示时。