Ich habe Redis 2.8.19.In redis 2.8, wie Wert zu ändern und unberührte die TTL
In der folgenden Sequenz möchte ich, dass die ursprüngliche Ablaufzeit von 60 Sekunden nicht zurückgesetzt wird, wenn Sie den Wert mykey
ändern.
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"
Nach dem GETSET
, würde ich erwarten, dass TTL mykey
kehrt über 40
Sekunden statt -1
.
Ist es möglich, den Wert zu ändern, ohne das Timeout zu verlieren oder zurückzusetzen?
Vielen Dank für einen Hinweis oder eine Lösung.
Ihnen danken. Ich benutze Jedis, also habe ich ein ttl = jedis.ttl (...); jedis.set (Schlüssel, Wert, XX, EX, TTL). Ich würde sagen, ist fast atomar :) Dennoch wäre ein atomarer UPDATE-Schlüsselwert-Befehl willkommen (wenn er die TTL nicht modifiziert) :) – Costin
Doing w/Jedis ist nicht atomar. Das obige Skript wird ausgeführt. Für Redis Lua mit Redis, hier ist ein netter Helfer: https://github.com/RedisLabs/luascript –