redis - 在redis 2.8中,如何修改值并保持TTL不变

标签 redis timeout nosql

我有 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/

相关文章:

javascript - 清除设置超时 Javascript

amazon-s3 - 如何在 Django 存储中设置 AWS S3 对象永不过期?

java - 基本数据源连接超时问题(使用mysql)

elasticsearch - 在 ElasticSearch 中匹配同一嵌套文档上的多个属性

mysql - 在什么情况下我应该使用缓存?

c# - 错误 : Timeout performing GET using Redis

caching - 使用 Redis 的无界多维索引

node.js - 在redis集群中如何获取 Node redis客户端通过命令HMSET设置的整个集群的数据?

mongodb - 可以 grep 整个数据库吗?

database - 分布式 (NoSQL) 数据库中的一致性效应