在 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 键
另请注意,在 6.0.9 之前的 Redis 版本中,过期的 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