键可以在 MULTI/EXEC 事务中过期吗?
最后更新日期 2024 年 5 月 8 日
问题
键可以在 MULTI/EXEC 事务中过期吗?
回答
键可以在 MULTI/EXEC 事务中过期。请查看以下示例。
127.0.0.1:6379> GET cnt
"1"
127.0.0.1:6379> EXPIRE cnt 10
(integer) 1
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> INCR cnt
QUEUED
等待一段时间并执行事务。
127.0.0.1:6379(TX)> EXEC
1) (integer) 1
127.0.0.1:6379> GET cnt
"1"
键 cnt
在事务中已过期,然后由 INCR
命令重新初始化为 1。
过期的被 WATCH 的键
另请注意,在 Redis 6.0.9 之前的版本中,过期的被 WATCH 的键不会导致事务中止。从 6.0.9 版本开始,被 WATCH 的键过期会导致事务中止。
127.0.0.1:6379> EXPIRE cnt 20
(integer) 1
127.0.0.1:6379> WATCH cnt
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET hola mundo
QUEUED
等待一段时间,并观察事务是如何中止的。
127.0.0.1:6379(TX)> EXEC
(nil)
在 MULTI/EXEC 事务中修改 TTL
可以在 MULTI/EXEC 事务中直接修改键的过期时间。
127.0.0.1:6379> EXPIRE cnt 30
(integer) 1
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> EXPIRE cnt 1000
QUEUED
127.0.0.1:6379(TX)> EXEC
1) (integer) 1
127.0.0.1:6379> TTL cnt
(integer) 994