Redis在Ubuntu上的内存淘汰机制是什么
导读:Redis 在 Ubuntu 的内存淘汰机制 核心机制与触发条件 Redis 通过配置项 maxmemory 设置实例可使用的最大内存上限;当已用内存达到该上限时,会根据 maxmemory-policy 执行键的淘汰(驱逐)。若策略为...
Redis 在 Ubuntu 的内存淘汰机制
核心机制与触发条件
- Redis 通过配置项 maxmemory 设置实例可使用的最大内存上限;当已用内存达到该上限时,会根据 maxmemory-policy 执行键的淘汰(驱逐)。若策略为 noeviction,写命令(如 SET、LPUSH)将被拒绝,读命令仍可执行。LRU/LFU/TTL 等策略为近似算法,用于更高效地选择淘汰对象。需要注意:maxmemory 为 0 表示不限制内存(生产环境不建议)。在存在从节点(replica)的场景,用于复制的输出缓冲区会从已用内存中扣除,以避免因网络/重同步导致“驱逐→删除→更多驱逐”的连锁问题。
策略一览
| 策略 | 作用范围 | 含义与行为 |
|---|---|---|
| volatile-lru | 仅对已设置过期时间的键 | 近似 LRU,优先淘汰最近最少使用 |
| allkeys-lru | 全部键 | 近似 LRU,优先淘汰最近最少使用 |
| volatile-lfu | 仅对已设置过期时间的键 | 近似 LFU,优先淘汰使用频率最低 |
| allkeys-lfu | 全部键 | 近似 LFU,优先淘汰使用频率最低 |
| volatile-random | 仅对已设置过期时间的键 | 随机淘汰 |
| allkeys-random | 全部键 | 随机淘汰 |
| volatile-ttl | 仅对已设置过期时间的键 | 淘汰剩余 TTL 最短的键 |
| noeviction | 全部键 | 不淘汰,写操作返回错误 |
| 说明:Redis 4.0 起新增 LFU 系列策略;所有带 volatile-* 的策略仅在键设置了过期时间时才有候选对象可淘汰。 |
Ubuntu 下的默认配置与查看方式
- 使用 deb 包在 Ubuntu 安装时,配置文件通常位于 /etc/redis/redis.conf。很多版本中 maxmemory 默认未设限(即 0,表示不限制),而 maxmemory-policy 的默认值在不同版本/发行包中可能不同,常见为 noeviction 或 volatile-lru。建议以实际配置文件为准。查看方式:
- 查看最大内存:CONFIG GET maxmemory
- 查看淘汰策略:CONFIG GET maxmemory-policy
- 动态修改(无需重启):CONFIG SET maxmemory 4gb;CONFIG SET maxmemory-policy allkeys-lru 修改后若需持久化,请同步更新 /etc/redis/redis.conf 并重启服务(如使用 systemd:sudo systemctl restart redis-server)。
如何选择与落地建议
- 纯缓存场景:优先使用 allkeys-lru(热点数据更可能保留)或 allkeys-lfu(更关注访问频次)。
- 缓存与持久化混合:使用 volatile-lru / volatile-ttl / volatile-random,仅对需要过期的键设置 TTL,避免无谓内存占用。
- 访问分布均匀:可选 allkeys-random,实现简单、开销稳定。
- 强一致/不容错写入:选 noeviction,在达到上限时让写失败,由业务侧降级或扩容处理。
- 运维提示:为 maxmemory 设置合理上限(结合业务与可用内存),并监控 evicted_keys 指标观察淘汰是否频繁;从节点存在时,适当留出内存给复制输出缓冲区,避免误触发连锁驱逐。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Redis在Ubuntu上的内存淘汰机制是什么
本文地址: https://pptw.com/jishu/788888.html
