在指定哈希键的一个或多个字段上设置过期时间(TTL 或存活时间)。必须指定至少一个字段。 当它们的 TTL 过期时,字段将自动从哈希键中删除。

字段过期时间只能通过删除或覆盖哈希字段内容的命令清除,包括 HDELHSET 命令。 这意味着所有在概念上 修改 存储在哈希键字段中的值而不将其替换为新值的操作都不会影响 TTL。

可以使用 HPERSIST 命令清除 TTL,将哈希字段恢复为持久字段。

请注意,使用零 TTL 调用 HEXPIRE/HPEXPIRE 或使用过去的时间调用 HEXPIREAT/HPEXPIREAT 将导致哈希字段被删除。

*选项

HEXPIRE 命令支持一组选项:

  • NX -- 对于每个指定字段,仅当字段没有过期时间时才设置过期时间。
  • XX -- 对于每个指定字段,仅当字段具有现有过期时间时才设置过期时间。
  • GT -- 对于每个指定字段,仅当新过期时间大于当前过期时间时才设置过期时间。
  • LT -- 对于每个指定字段,仅当新过期时间小于当前过期时间时才设置过期时间。

对于 GTLT,非易失性字段被视为无限 TTL。 NXXXGTLT 选项互斥。

*刷新过期时间

可以使用已设置现有 TTL 的字段作为参数调用 HEXPIRE。 在这种情况下,存活时间将被 更新 为新值。

*Redis Search 和字段过期

从 Redis 8 开始,Redis Search 在处理过期哈希字段时增强了行为。有关 FT.SEARCHFT.AGGREGATE 命令如何与过期哈希字段交互的详细信息,请参见 键和字段过期行为

*示例

# 字段过期:使用 HEXPIRE 配合条件选项(NX、XX、GT、LT)对单个哈希字段设置 TTL,以实现对字段生命周期的精细控制
HEXPIRE no-key 20 NX FIELDS 2 field1 field2
(nil)
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> HEXPIRE no-key 20 NX FIELDS 2 field1 field2
ERR Unknown or disabled command 'HEXPIRE'
redis> HSET mykey field1 "hello" field2 "world"
(integer) 2
redis> HEXPIRE mykey 10 FIELDS 3 field1 field2 field3
ERR Unknown or disabled command 'HEXPIRE'
redis> HGETALL mykey
1) "field1"
2) "hello"
3) "field2"
4) "world"
redis>

*返回信息