HEXPIRE
使用相对过期时间(秒)设置哈希字段的过期时间
语法
HEXPIRE key seconds [NX | XX | GT | LT] FIELDS numfields field [field ...]
引入版本:7.4.0
复杂度摘要:O(N)
为给定哈希键的一个或多个字段设置过期时间(TTL 或生存时间)。您必须至少指定一个字段。当字段的 TTL 过期时,字段将自动从哈希键中删除。
字段过期只能通过删除或覆盖哈希字段内容的命令来清除,包括 HDEL 和 HSET 命令。这意味着从概念上讲,对存储在哈希键字段中的值进行 改变 操作而不用新值替换它的所有操作都将使 TTL 保持不变。
您可以使用 HPERSIST 命令清除 TTL,这会将哈希字段恢复为持久字段。
请注意,使用零 TTL 调用 HEXPIRE/HPEXPIRE 或使用过去的时间调用 HEXPIREAT/HPEXPIREAT 将导致哈希字段被删除。
必需参数
key
保存哈希值的键的名称。
seconds
生存时间,以秒为单位。每个指定的字段都会在这么多秒后被删除。
FIELDS numfields field [field ...]
要设置过期时间的哈希字段。 numfields 是字段的数量,后面跟着这些字段的名称。
可选参数
以下选项修改命令的行为。它们是相互排斥的。
NX
对于每个指定字段,只有当该字段没有过期时才设置过期时间。
XX
对于每个指定字段,仅当该字段存在过期时才设置过期时间。
GT
对于每个指定字段,仅当新的过期时间大于当前的过期时间时才设置过期时间。出于 GT 的目的,非易失性字段被视为无限 TTL。
LT
对于每个指定字段,仅当新的到期时间小于当前的到期时间时才设置到期时间。出于 LT 的目的,非易失性字段被视为无限 TTL。
刷新过期
您可以使用已设置现有 TTL 的字段作为参数来调用 HEXPIRE。在这种情况下,生存时间是新值的 更新。
Redis搜索和字段过期
从 Redis 8 开始,Redis Search 在处理过期哈希字段时增强了行为。有关 FT.SEARCH 和 FT.AGGREGATE 命令如何与过期哈希字段交互的详细信息,请参阅 键和字段过期行为。
示例
> HEXPIRE no-key 20 NX FIELDS 2 field1 field2
1) (integer) -2
2) (integer) -2
> HSET mykey field1 "hello" field2 "world"
(integer) 2
> HEXPIRE mykey 10 FIELDS 3 field1 field2 field3
1) (integer) 1
2) (integer) 1
3) (integer) -2
> HGETALL mykey
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
返回值
RESP2
以下之一: * 数组回复。对于每个字段: - 整数回复: -2 如果提供的哈希键中不存在此类字段,或者提供的键不存在。 - 整数回复: 0 如果指定 NX | XX | GT | LT 条件尚未满足。 - 整数回复:1(如果设置/更新了过期时间)。 - 整数回复:2,当使用 0 秒/毫秒调用 HEXPIRE/HPEXPIRE 时,或使用过去的 Unix 时间(以秒/毫秒为单位)调用 HEXPIREAT/HPEXPIREAT 时。 * 简单错误回复: - 如果解析失败、缺少强制参数、指定未知参数或参数值类型错误或超出范围。 - 如果提供的键存在但不是哈希值。
RESP3
以下之一: * 数组回复。对于每个字段: - 整数回复: -2 如果提供的哈希键中不存在此类字段,或者提供的键不存在。 - 整数回复: 0 如果指定 NX | XX | GT | LT 条件尚未满足。 - 整数回复:1(如果设置/更新了过期时间)。 - 整数回复:2,当使用 0 秒/毫秒调用 HEXPIRE/HPEXPIRE 时,或使用过去的 Unix 时间(以秒/毫秒为单位)调用 HEXPIREAT/HPEXPIREAT 时。 * 简单错误回复: - 如果解析失败、缺少强制参数、指定未知参数或参数值类型错误或超出范围。 - 如果提供的键存在但不是哈希值。
资料来源:Redis 官方 HEXPIRE 文档;中文内容参考 Redis 文档许可。