我正在通过 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)
Run Code Online (Sandbox Code Playgroud)
然后我们最终得到引用新值的原始键和另外 12 小时的 ttl。这可能吗?
只需使用两个命令:一个 SET 来更新值,然后一个EXPIRE来更新 TTL。
更新:要检索原始 TTL,您必须将其存储在单独的密钥中。据我所知,您可以获取当前的 TTL,但不能获取其初始值。
所以它在伪代码中看起来像这样(REDIS命令是大写的):
SET myKey value
EXPIRE myKey 3600
SET myKey:ttl 3600
Run Code Online (Sandbox Code Playgroud)
将 TTL 固定为 3600s
进而
SET myKey newValue
ttlvalue = GET mykey:ttl
EXPIRE myKey ttlvalue
Run Code Online (Sandbox Code Playgroud)
更新2:
使用 Agis 建议使用 SETEX 可能会改进我的响应,SETEX 在一次操作中设置给定键的值及其到期日期。所以它会变成:
SETEX myKey 3600 value
SET myKey:ttl 3600
Run Code Online (Sandbox Code Playgroud)
将 TTL 固定为 3600s
进而
ttlvalue = GET mykey:ttl
SETEX myKey ttlvalue newValue
Run Code Online (Sandbox Code Playgroud)
更新值并重置其 TTL