*Redis HPERSIST 命令
移除 Hash 中一个或多个 field 的过期时间,使其永不过期。Redis 7.4+ 引入。
*语法
HPERSIST key field [field ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| field | String | 是 | 字段名,可一次移除多个 |
*返回值
| 条件 | 返回值 |
|---|---|
| 对每个 field | -2: field 不存在; -1: key 不存在; 0: field 无 TTL; 1: 移除成功 |
*时间复杂度
O(N),N 为 field 数量。
*示例
> HSET user:1001 name "Alice" email "alice@example.com"
> HEXPIRE user:1001 60 name
1) (integer) 1
> HPERSIST user:1001 name
1) (integer) 1
> HTTL user:1001 name
1) (integer) -1 # 永不过期
# 移除不存在的 field
> HPERSIST user:1001 phone
1) (integer) -2
# 移除无 TTL 的 field
> HPERSIST user:1001 email
1) (integer) 0
*常见错误
- 对非 Hash 使用:返回 WRONGTYPE。
*最佳实践
- 永久字段:确认数据有效后,用 HPERSIST 移除 field 的 TTL,设为永久保留。
*FAQ
Q: HPERSIST 和 HEXPIRE 是相反操作吗? A: 是。HPERSIST 移除 TTL;HEXPIRE 设置 TTL。两者互为逆操作。
Q: HPERSIST 后 field 会被删除吗? A: 不会。HPERSIST 后 field 永不过期,除非手动 HDEL 删除。