HEXPIRE
Syntax
HEXPIRE key seconds [NX | XX | GT | LT] FIELDS numfields field [field ...]
- Available since:
- 7.4.0
- Time complexity:
- O(N) where N is the number of specified fields
- ACL categories:
-
@write
,@hash
,@fast
,
为给定哈希键的一个或多个字段设置过期时间(TTL或生存时间)。您必须至少指定一个字段。 当字段的TTL过期时,它们将自动从哈希键中删除。
字段的过期时间只会被删除或覆盖哈希字段内容的命令清除,包括HDEL
和HSET
命令。
这意味着所有在概念上改变存储在哈希键字段中的值而不替换为新值的操作都不会影响TTL。
您可以使用HPERSIST
命令清除TTL,该命令将哈希字段恢复为持久字段。
请注意,使用零TTL调用HEXPIRE
/HPEXPIRE
或使用过去的时间调用HEXPIREAT
/HPEXPIREAT
将导致哈希字段被删除。
选项
HEXPIRE
命令支持一组选项:
NX
-- 对于每个指定的字段,仅在字段没有设置过期时间时设置过期时间。XX
-- 对于每个指定的字段,仅当该字段已有过期时间时才设置过期时间。GT
-- 对于每个指定的字段,仅当新过期时间大于当前过期时间时设置过期。LT
-- 对于每个指定的字段,仅当新过期时间小于当前过期时间时设置过期。
为了GT
和LT
的目的,非易失性字段被视为无限TTL。
NX
、XX
、GT
和LT
选项是互斥的。
刷新过期
你可以使用已经设置了TTL的字段作为参数调用HEXPIRE
。
在这种情况下,生存时间将被更新为新值。
示例
redis> HEXPIRE no-key 20 NX FIELDS 2 field1 field2
(nil)
redis> HSET mykey field1 "hello" field2 "world"
(integer 2)
redis> HEXPIRE mykey 10 FIELDS 3 field1 field2 field3
1) (integer) 1
2) (integer) 1
3) (integer) -2
redis> HGETALL mykey
(empty array)
RESP2/RESP3 回复
以下之一:
- Array reply. 对于每个字段:
- Integer reply:
-2
如果提供的哈希键中不存在该字段,或者提供的键不存在。 - Integer reply:
0
如果指定的NX | XX | GT | LT条件未满足。 - Integer reply:
1
如果设置了/更新了过期时间。 - Integer reply:
2
当使用0秒/毫秒调用HEXPIRE
/HPEXPIRE
时,或者当使用过去的Unix时间(秒/毫秒)调用HEXPIREAT
/HPEXPIREAT
时。
- Integer reply:
- Simple error reply:
- 如果解析失败,缺少必需的参数,指定了未知的参数,或者参数值的类型错误或超出范围。
- 如果提供的键存在但不是哈希类型。