Redis提供了八种缓存淘汰策略,这些策略在内存不足时用于决定哪些数据应当被移除,以便为新数据腾出空间。以下是这八种策略的简介:
- noeviction(不淘汰)
- 当内存不足以容纳新写入数据时,新写入操作会报错,Redis不会淘汰任何数据。
- 特点:不会删除任何数据,而是直接拒绝写入请求。
- volatile-lru(对设置了过期时间的数据使用LRU算法淘汰)
- 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
- 特点:只针对设置了过期时间的键进行淘汰,使用LRU算法。
- volatile-ttl(对设置了过期时间的数据按TTL淘汰)
- 从已设置过期时间的数据集中挑选剩余存活时间最短的键淘汰。
- 特点:按剩余存活时间淘汰,只针对设置了过期时间的键。
- volatile-random(对设置了过期时间的数据随机淘汰)
- 从已设置过期时间的数据集中随机挑选键淘汰。
- 特点:随机淘汰,只针对设置了过期时间的键。
- allkeys-lru(对所有数据使用LRU算法淘汰)
- 从所有数据集中挑选最近最少使用的数据淘汰。
- 特点:针对所有键使用LRU算法淘汰,无论是否设置了过期时间。
- allkeys-lfu(对所有数据使用LFU算法淘汰)
- 从所有数据集中挑选最不常用的数据淘汰(LFU算法,4.0版本新增)。
- 特点:基于访问频率淘汰,针对所有键,能更有效地保留经常访问的数据。
- allkeys-random(对所有数据随机淘汰)
- 从所有数据集中随机挑选键淘汰。
- 特点:随机淘汰,不考虑数据的访问频率或过期时间。
- volatile-lfu(对设置了过期时间的数据使用LFU算法淘汰)
- 从已设置过期时间的数据集中挑选最不常用的数据淘汰(LFU算法)。
- 特点:基于访问频率淘汰,只针对设置了过期时间的键。