Maison > Questions et réponses > le corps du texte
使用 redis-cli
设置 mykey
, 并且设置其过期时间为 40s
, 然后, 我再重新设置 mykey
, 这时 mykey
的值会被重置, 我不明白的是为啥 过期时间也同时重置了?如果我仅仅想重置值, 不更改过期时间有没办法?
源码:
SET mykey "Hello"
EXPIRE mykey 40
EXISTS mykey
SET mykey "Hello"
EXISTS mykey
EXISTS mykey
大家讲道理2017-04-27 09:04:48
Allez sur le site officiel et lisez la description de l'expiration :
C'est expliqué comme ceci :
The timeout will only be cleared by commands that delete or overwrite the contents of the key, including DEL, SET, GETSET and all the *STORE commands. This means that all the operations that conceptually alter the value stored at the key without replacing it with a new one will leave the timeout untouched. For instance, incrementing the value of a key with INCR, pushing a new value into a list with LPUSH, or altering the field value of a hash with HSET are all operations that will leave the timeout untouched.
Si vous utilisez DEL, SET, GETSET, la valeur stockée dans la clé sera remplacée par une nouvelle, et la commande effacera également le délai d'attente si vous ajoutez une donnée à la structure de la liste ou modifiez un champ de la liste ; hset, le délai d'attente ne sera pas effacé ; si vous souhaitez écraser la valeur via set, vous devez réinitialiser expire.
Cliquez sur le lien
怪我咯2017-04-27 09:04:48
EXPIREAT et EXPIRE réinitialiseront le délai d'expiration lors de la mise à jour de la valeur.
Obtenez le délai d'expiration de la clé via ttl avant de le définir
Après le réglage, définissez la valeur ttl sur le délai d'expiration
192.168.1.9:6379> set key value
OK
192.168.1.9:6379> expire key 100
(integer) 1
192.168.1.9:6379> ttl key
(integer) 98
192.168.1.9:6379> set key value1
OK
192.168.1.9:6379> expire key 98
(integer) 1
192.168.1.9:6379> ttl key
(integer) 96
192.168.1.9:6379>
Mais il y aura des erreurs de cette façon. Je ne sais pas si d'autres ont de meilleures méthodes.