web-dev-qa-db-fra.com

Redis - Comment expirer une clé quotidiennement

Je sais que EXPIREAT dans Redis est utilisé pour spécifier quand une clé expirera. Mon problème est cependant qu'il faut un horodatage UNIX absolu. J'ai du mal à penser à ce que je devrais définir comme argument si je veux que la clé expire à la fin de la journée.

Voici comment j'ai défini ma clé:

client.set (clé, corps);

Donc, pour définir l'expiration à:

client.expireat (clé, ???);

Des idées? J'utilise ceci avec nodejs et sailsjs Merci!

17
bless1204

Si vous souhaitez l'expirer 24 heures plus tard

client.expireat(key, parseInt((+new Date)/1000) + 86400);

Ou si vous voulez qu'il expire exactement à la fin de la journée, vous pouvez utiliser .setHours sur un objet new Date() pour obtenir l'heure à la fin de la journée et utilisez-le.

var todayEnd = new Date().setHours(23, 59, 59, 999);
client.expireat(key, parseInt(todayEnd/1000));
31
laggingreflex

Puisque SETNX, SETEX, PSETEX vont être dépréciés dans les prochaines versions, la bonne façon est:

client.set(key, value, 'EX', 60 * 60 * 24, callback);

Voir ici pour une discussion détaillée sur ce qui précède.

17
loretoparisi

Vous pouvez définir la valeur et l'expiration ensemble.

  //here key will expire after 24 hours
  client.setex(key, 24*60*60, value, function(err, result) {
    //check for success/failure here
  });

 //here key will expire at end of the day
  client.setex(key, parseInt((new Date().setHours(23, 59, 59, 999)-new Date())/1000), value, function(err, result) {
    //check for success/failure here
  });
10
Praveena