在Redis中,内存的大小是有限的,所以为了防止内存饱和,需要实现某种键淘汰策略。主要有两种方法,一种是当Redis内存不足时所采用的内存释放策略。另一种是对过期key进行删除的策略,也可以在某种程度上释放内存。
Redis采用的默认内存释放策略是noeviction-不删除,达到最大内存时,如需更多内存(存入数据),则操作报错;默认的过期key删除策略则是惰性删除+定期删除的方案;
默认在linux系统下的redis.conf文件下
Redis的默认策略为noeviction,支持的策略有8种:
volatile-lru
只对设置了expire过期时间的key生效,优先删除最近最少使用(least recently used ,LRU) 的 key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
allkeys-lru
所有key通用;优先删除最近最少使用(least recently used ,LRU)的key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
volatile-lfu
Redis4.0新增的策略。只对设置了expire过期时间的key生效,优先删除最不常用(least frequently used ,LFU) 的 key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
allkeys-lfu
Redis4.0新增的策略。所有key通用;优先删除最不常用(least frequently used , LFU)的key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
volatile-random
只对设置了expire过期时间的key生效,随机删除一部分key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
allkeys-random
所有key通用,随机删除一部分key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
volatile-ttl
只对设置了expire过期时间的key生效,优先删除剩余时间(time to live,TTL) 最短的key,直到有可用的内存,如果没有可删除的key并且内尺还是不够,则报错。
noeviction
默认策略,不删除任何key,在进行写操作时返回错误信息
总结
对Redis缓存已满,删除淘汰哪些数据?
1. 有设置过期时间数据
- 过期时间快到的数据,优先删除
- LRU : 最近最少被使用,优先删除
- LFU : 使用次数最少的,优先删除
- Random : 随机删除
2. 全部所有数据
- LRU : 最近最少被使用,优先删除
- LFU : 使用次数最少的,优先删除
- Random : 随机删除