在redis2.8中,如何修改值并保持TTL不变



我有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命令清除密钥的TTL。没有Redis命令可以像你试图做的那样保留它。但是,可以使用Lua脚本,根据你的要求设置和过期密钥。脚本可能如下所示:

local ttl = redis.call('TTL',KEYS[1])
redis.call('SET',KEYS[1],ARGV[1])
redis.call('EXPIRE',KEYS[1],ttl)
return "OK"`

`

SET命令现在有一个名为keepttl的选项。来自文档:

KEETTL—保留与密钥相关联的生存时间。

GETSET仍然不支持,但是,嘿,进步!

在使用简单计数器的情况下,这可以通过使用INCR/INCRBY和DECR/DECRBY命令来实现。它们将分别递增和递减计数器,并保持TTL值不变。

相关内容

  • 没有找到相关文章

最新更新