Comment “EXPIRE” la clé enfant “HSET” dans redis?

Je dois expirer toutes les clés de hash redis, qui sont plus anciennes qu’un mois.

Ce n’est pas possible , pour garder Redis simple .

Quoth Dieu:

Salut, ce n’est pas possible, soit utiliser une clé de niveau supérieur différente pour ce champ spécifique, soit stocker avec un autre champ avec une date d’expiration, récupérer les deux, et laisser l’application comprendre si elle est toujours valide ou non. heure actuelle.

Il existe un framework java Redisson qui implémente un object de hachage avec prise en charge TTL d’entrée. Il utilise des objects Redis sous hmap et zset sous le capot. Exemple d’utilisation:

 RMapCache map = redisson.getMapCache('map'); map.put(1, 30, TimeUnit.DAYS); // this entry expires in 30 days 

Cette approche est très utile.

Vous pouvez. Voici un exemple.

 redis 127.0.0.1:6379> hset key f1 1 (integer) 1 redis 127.0.0.1:6379> hset key f2 2 (integer) 1 redis 127.0.0.1:6379> hvals key 1) "1" 2) "1" 3) "2" redis 127.0.0.1:6379> expire key 10 (integer) 1 redis 127.0.0.1:6379> hvals key 1) "1" 2) "1" 3) "2" redis 127.0.0.1:6379> hvals key 1) "1" 2) "1" 3) "2" redis 127.0.0.1:6379> hvals key 

Utilisez la commande EXPIRE ou EXPIREAT .

Si vous voulez expirer des clés spécifiques dans le hash plus ancien que 1 mois. Ce n’est pas possible. La commande Redis expire est pour toutes les clés du hachage. Si vous définissez une clé de hachage quotidienne, vous pouvez définir le temps de vie d’une clé.

 hset key-20140325 f1 1 expire key-20140325 100 hset key-20140325 f1 2 

En ce qui concerne une implémentation NodeJS, j’ai ajouté un champ expiryTime personnalisé dans l’object que expiryTime dans le HASH. Ensuite, après une période de temps spécifique, j’efface les entrées HASH expirées en utilisant le code suivant:

 client.hgetall(HASH_NAME, function(err, reply) { if (reply) { Object.keys(reply).forEach(key => { if (reply[key] && JSON.parse(reply[key]).expiryTime < (new Date).getTime()) { client.hdel(HASH_NAME, key); } }) } }); 

Vous pouvez expirer facilement les hachages Redis, par exemple en utilisant python

 import redis conn = redis.Redis('localhost') conn.hmset("hashed_user", {'name': 'robert', 'age': 32}) conn.expire("hashed_user", 10) 

Cela va expirer toutes les clés enfants dans hash hashed_user après 10 secondes

même chose de redis-cli,

 127.0.0.1:6379> HMSET testt username wlc password P1pp0 age 34 OK 127.0.0.1:6379> hgetall testt 1) "username" 2) "wlc" 3) "password" 4) "P1pp0" 5) "age" 6) "34" 127.0.0.1:6379> expire testt 10 (integer) 1 127.0.0.1:6379> hgetall testt 1) "username" 2) "wlc" 3) "password" 4) "P1pp0" 5) "age" 6) "34" 

après 10 secondes

 127.0.0.1:6379> hgetall testt (empty list or set)