Redis提供了以下几种内存淘汰策略:
- volatile-lru : 从已设置过期时间集合中挑选最久未使用的行删除。
适用于服务器内存很大或者对数据不重要的情况。 - volatile-random: 随机删除已设置过期时间集合中的行。
速度比上面快,但元素选择不理想。 - allkeys-lru :从所有集合中,挑选最久未使用的行删除。
- allkeys-random :随机删除数据库中的行。
- volatile-ttl : 基于元素过期时间(TTL)剔除数据。
优先剔除那些TTL较短的数据。 - noeviction : 不剔除任何元素,只在必要的时候返回出错信息。
- volatile-lfu :根据元素的频率删掉最不常使用的元素。
跟LUR相比,算法复杂度更高。
使用方法:
- 通过
maxmemory
设置内存使用上限。
maxmemory <bytes>
- 设置内存淘汰策略。
maxmemory-policy <strategy>
策略有:volatile-lru、allkeys-lru 等。
- 当内存超限时,会按照策略移除数据。
不同策略的优缺点:
- LRU : 最容易实现,但导致元素分布失衡。
- 随机:选择随机,但频繁元素可能较多概率被删。
- TTL : 优先挑选TTL短的元素回收。
- 频率:根据元素访问频率淘汰,但算法复杂。
总的来说,Redis提供了多种内存淘汰策略,可以按需选择。主要考虑元素的访问频率、过期时间、内存使用等因素。