*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 可能转而驱逐其他连接的数据。