基础知识面
-
内存使用超过预设限制:
- 当 Redis 实例使用的内存超过了配置文件中设置的
maxmemory限制时,Redis 会根据配置的内存淘汰策略(maxmemory-policy)来选择并移除一些数据。这是为了防止 Redis 耗尽系统内存,从而导致性能下降或系统崩溃。
- 当 Redis 实例使用的内存超过了配置文件中设置的
-
达到内存警戒线:
- 在某些情况下,即使还没有完全达到
maxmemory限制,但当内存使用接近该限制时,Redis 可能会提前启动内存淘汰策略。这是因为 Redis 需要保留一定的内存空间来处理新的写入请求,如SET、HSET、LPUSH等操作。提前触发淘汰策略有助于确保这些写入请求能够顺利进行。
- 在某些情况下,即使还没有完全达到
-
每次执行写操作时检查:
- 每次执行写操作(如
SET、HSET、LPUSH等)时,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 算法淘汰数据。