Redis提供了多种内存淘汰策略,以便在内存不足时决定哪些键被删除。这些策略可以在Redis配置文件中通过maxmemory-policy选项进行设置。Redis提供的淘汰策略包含以下几种:
- noeviction:这是默认策略,当内存不足以容纳更多数据时,新的写入会报错。
- allkeys-lru:当内存不足时,根据最近最少使用(Least Recently Used,LRU)算法删除键。
- volatile-lru:在内存不足时,根据LRU算法删除设置了过期时间的键。
- allkeys-random:在内存不足时,随机删除键。
- volatile-random:在内存不足时,随机删除设置了过期时间的键。
- volatile-ttl: 在内存不足时,首选删除TTL(Time To Live)值较小的键,即选择剩余过期时间最短的键进行删除。
在Redis4.0版本之后,两种新的内存淘汰策略被引入:
- allkeys-lfu:当内存不足时,使用最少使用(Least Frequently Used, LFU)算法删除键。
- volatile-lfu:当内存不足时,使用LFU算法删除设置了过期时间的键。
以上淘汰策略只在已经达到配置的最大内存(maxmemory配置项)时才会生效。如果未设置maxmemory,那么在达到物理内存限制之前,Redis不会主动淘汰任何键。