我有 Redis 2.8.19。
在下面的序列中,我希望在修改 mykey
的值时不会重置原来的 60 秒过期时间。
127.0.0.1:6379[10]> SET mykey A EX 60 NX
OK
127.0.0.1:6379[10]> TTL mykey
(integer) 53
127.0.0.1:6379[10]> GETSET mykey B
"A"
127.0.0.1:6379[10]> TTL mykey
(integer) -1
127.0.0.1:6379[10]> GET mykey
"B"
在 GETSET
之后,我希望 TTL mykey
返回大约 40
秒而不是 -1
.
是否可以在不丢失或重置超时的情况下修改该值?
感谢您提供任何提示或解决方案。
最佳答案
Redis 的 SET
命令清除 key 的 TTL。没有 Redis 命令可以像您尝试的那样保留它。但是,可以使用 Lua 脚本来根据您的要求设置和过期 key 。该脚本可能如下所示:
local ttl = redis.call('TTL',KEYS[1])
redis.call('SET',KEYS[1],ARGV[1])
redis.call('EXPIRE',KEYS[1],ttl)
return "OK"`
`
关于redis - 在redis 2.8中,如何修改值并保持TTL不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36643722/