在 Redis 中,您将如何更新密钥并重置原始 TTL?

aso*_*erg 6 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)
Run Code Online (Sandbox Code Playgroud)

然后我们最终得到引用新值的原始键和另外 12 小时的 ttl。这可能吗?

Pas*_*rer 5

只需使用两个命令:一个 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