实际上redis定义了【八种内存淘汰策略】来处理redis内存满的情况
- noeviction:直接返回错误,不淘汰任何已经存在的redis键
- allkeys-lru:所有的键使用lru算法进行淘汰
- volatile-lru:有过期时间的使用lru算法进行淘汰
- allkeys-random:随机删除redis键
- volatile-random:随机删除有过期时间的redis键
- volatile-ttl:删除快过期的redis键
- volatile-lfu:根据lfu算法从有过期时间的键删除
- allkeys-lfu:根据lfu算法从所有键删除
解析
设置多大的缓存容量合适?
具体结合应用数据实际访问特点和成本开销来综合考虑。一般建议把缓存容量设置为总数据量的 15% 到 30%,兼顾访问性能和内存空间开销。
对于 Redis 来说,一旦确定了缓存最大容量,比如 4GB,就可以执行下面命令:
<span style="color:#000000"><span style="background-color:#fafafa"><code class="language-c">CONFIG SET maxmemory <span style="color:#986801">4</span>gb
</code></span></span>
- 1
不过,缓存被写满是不可避免的。
缓存替换需要解决两个问题:
- 决定淘汰哪些数据
- 如何处理那些被淘汰的数据
Redis 缓存有哪些淘汰策略?
Redis 4.0 之前一共实现了 6 种内存淘汰策略,在 4.0 之后,又增加了 2 种策略。我们可以按照是否会进行数据淘汰把它们分成两类
- 不进行数据淘汰的策略,只