【Redis篇08】redis内存淘汰策略

46 阅读2分钟

基础知识面

  1. 内存使用超过预设限制

    • 当 Redis 实例使用的内存超过了配置文件中设置的 maxmemory 限制时,Redis 会根据配置的内存淘汰策略(maxmemory-policy)来选择并移除一些数据。这是为了防止 Redis 耗尽系统内存,从而导致性能下降或系统崩溃。
  2. 达到内存警戒线

    • 在某些情况下,即使还没有完全达到 maxmemory 限制,但当内存使用接近该限制时,Redis 可能会提前启动内存淘汰策略。这是因为 Redis 需要保留一定的内存空间来处理新的写入请求,如 SETHSETLPUSH 等操作。提前触发淘汰策略有助于确保这些写入请求能够顺利进行。
  3. 每次执行写操作时检查

    • 每次执行写操作(如 SETHSETLPUSH 等)时,Redis 都会检查当前的内存使用情况。如果发现内存使用超过了 maxmemory 限制,就会立即触发内存淘汰策略。这确保了在内存满之前及时释放空间。

LRU(Least Recently Used,最近最少使用)
LFU(Least Frequently Used,最不经常使用)
Redis 提供了几种不同的内存淘汰策略,可以根据具体需求选择合适的策略:

  • noeviction:不淘汰任何数据,当内存不足时,对于写命令返回错误。(默认)
  • allkeys-lru:从所有键中使用最近最少使用(LRU)算法淘汰数据。
  • volatile-lru:从设置了过期时间的键中使用 LRU 算法淘汰数据。
  • allkeys-random:从所有键中随机淘汰数据。
  • volatile-random:从设置了过期时间的键中随机淘汰数据。
  • volatile-ttl:从设置了过期时间的键中优先淘汰剩余生存时间(TTL)最短的数据。
  • allkeys-lfu:从所有键中使用最少频率使用(LFU)算法淘汰数据。
  • volatile-lfu:从设置了过期时间的键中使用 LFU 算法淘汰数据。