*Redis CLIENT NO-EVICT 命令
CLIENT NO-EVICT 设置当前客户端连接的驱逐保护状态,防止其数据被内存驱逐策略删除。
*语法
CLIENT NO-EVICT <ON | OFF>
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ON / OFF | Flag | 是 | 启用或禁用驱逐保护 |
*返回值
- OK:设置成功
- Error:参数错误时返回
*时间复杂度
O(1)
*
*示例
*启用驱逐保护
> CLIENT NO-EVICT ON
OK
*禁用驱逐保护
> CLIENT NO-EVICT OFF
OK
*在 CLIENT INFO 中查看状态
> CLIENT NO-EVICT ON
OK
> CLIENT INFO
id=3 addr=127.0.0.1:54321 ... no-evict=on ...
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 未提供 ON/OFF 参数 | 必须指定 ON 或 OFF |
| ERR syntax error | 参数不是 ON 或 OFF | 使用 ON 或 OFF |
*最佳实践
- 用于保护重要客户端(如监控、管理连接)的数据不被驱逐
- 在内存紧张且启用驱逐策略时,为核心业务连接启用 NO-EVICT
- 注意:NO-EVICT 保护的只是该客户端访问的键,而非所有键
- 生产环境谨慎使用,可能导致其他客户端的数据被优先驱逐
*FAQ
Q1: NO-EVICT 保护的是什么? A: 当 Redis 内存达到上限并启用驱逐策略时,NO-EVICT 连接正在访问的键不会被驱逐。
Q2: NO-EVICT 和 maxmemory-policy 有什么关系? A: NO-EVICT 在逐出时给予该客户端的数据更高的保护优先级,但最终仍可能因所有数据都受保护而触发 OOM。
Q3: 一个连接启用 NO-EVICT 会影响其他连接吗? A: 会间接影响。受保护的数据不会被驱逐,Redis 可能转而驱逐其他连接的数据。