Php 在Redis中,如何更新密钥并重置原始TTL?
我通过PHPRedis(实际上是围绕PHPRedis构建的更高级别的包装器)与Redis进行交互。我想更新一个密钥并在数据库中重置它,但是TTL应该在程序的当前点重置为原始值。我的类不知道原始TTL是什么 假设最初的TTL是12小时。我想这样做:Php 在Redis中,如何更新密钥并重置原始TTL?,php,redis,Php,Redis,我通过PHPRedis(实际上是围绕PHPRedis构建的更高级别的包装器)与Redis进行交互。我想更新一个密钥并在数据库中重置它,但是TTL应该在程序的当前点重置为原始值。我的类不知道原始TTL是什么 假设最初的TTL是12小时。我想这样做: redis->get($key) $original_ttl = // figure it out $new_value = something redis->set($key, $new_value, $original_ttl) 然后
redis->get($key)
$original_ttl = // figure it out
$new_value = something
redis->set($key, $new_value, $original_ttl)
然后,我们以原始键引用一个新值和另一个12小时ttl结束。这可能吗?只需使用两个命令:一个用于更新值的SET,然后一个用于更新TTL 更新:要检索原始TTL,必须将其存储在单独的密钥中。据我所知,你可以得到当前的TTL,但不能得到它的初始值 所以在伪代码中看起来是这样的(REDIS命令用大写字母表示): 将TTL修复为3600s 然后
SET myKey newValue
ttlvalue = GET mykey:ttl
EXPIRE myKey ttlvalue
ttlvalue = GET mykey:ttl
SETEX myKey ttlvalue newValue
更新2:
使用Agis建议使用SETEX可以改进我的回答,SETEX在一次操作中为给定的密钥设置一个值及其过期日期。因此,它将成为:
SETEX myKey 3600 value
SET myKey:ttl 3600
将TTL修复为3600s
然后
SET myKey newValue
ttlvalue = GET mykey:ttl
EXPIRE myKey ttlvalue
ttlvalue = GET mykey:ttl
SETEX myKey ttlvalue newValue
要更新该值并重置其TTL,您可以在代码中的某个常量中定义初始TTL值,并在每次设置键时使用它 然后使用设置密钥的值和过期时间:
define('TTL', 120); // 2 minutes
redis->setex($key, TTL, $new_value);
Redis中的等效命令如下所示:
> SETEX mykey 120 "myvalue"
如果要以毫秒而不是秒为单位设置时间,请使用。正确-但我需要获取插入密钥时设置的原始TTL,以便将其重置为原始值。我在第一次阅读时不理解这一点。我更新了我的答案。@asolberg:我改进了答案