概念:当redis的内存超过最大的允许内存时,redis会触发内存淘汰策略,这种是非正常情况下为了保证redis正常允许的一种保护策略;redis内存不够时,redis服务器会根据服务器设置的淘汰策略删除一些不常用的数据,以保证redis的正常运行。查询当前redis服务使用的内存淘汰策略命令如下:
config get maxmemory-policy
阿里云的查看如下图-适合没有执行命令权限的开发人员查看
内存淘汰策略的种类如下
- no eviction 不淘汰任何数据,当内存不足时,新增缓存会报错。
- allkey-lru 淘汰整个键值中最久未使用的键值。
- allkey-random 随机淘汰任意键。
- volatile-lru 淘汰所有设置过期时间的键值中最久未使用的键值,是redis默认的内存淘汰策略。
- volatile-random 随机淘汰设置过期时间的任意键值
- volatile-ttl 优先淘汰更早过期的键值
redis4.0版本之后新增了以下两种策略
- volatile-lfu - 淘汰所有设置了过期时间的键值中最少使用的键值
- allkeys-lfu - 淘汰整个键值中最少使用的键值
内存淘汰算法有如下两种
- LRU淘汰算法 - Least Recently Used 淘汰最久没有使用的键值 基于链表实现:链表中的元素按照操作顺序从链表头往链表尾排,最新的操作都会放到表头,当redis就进行这种算法的内存淘汰时,只需要删除表尾的元素即可。
- LFU淘汰算法 - Least Frequently used 淘汰最少使用的键值