Redis - 如何每日到期密钥

ble*_*204 18 unix timestamp redis node.js sails.js

我知道Redis中的EXPIREAT用于指定密钥何时到期.我的问题是它需要一个绝对的UNIX时间戳.如果我希望密钥在一天结束时到期,我发现很难想到我应该设置什么作为参数.

这是我设置密钥的方式:

client.set(key,body);

所以设置到期时间:

client.expireat(key,???);

有任何想法吗?我正在使用nodejs和sailsjs谢谢!

lag*_*lex 32

如果你想在24小时后过期

client.expireat(key, parseInt((+new Date)/1000) + 86400);
Run Code Online (Sandbox Code Playgroud)

或者,如果你希望它在今天结束正好到期,你可以使用.setHours一个在new Date()对象在一天结束时获得的时间,并使用它.

var todayEnd = new Date().setHours(23, 59, 59, 999);
client.expireat(key, parseInt(todayEnd/1000));
Run Code Online (Sandbox Code Playgroud)

  • 在哪里记录? (3认同)

cod*_*hsg 23

对于新版本^4.6.7,您可以使用 set 和 expire 类似

await client.set(key , value, {EX: 60*60*24})
Run Code Online (Sandbox Code Playgroud)

EX应以秒为单位设置(例如:60 * 60 * 24 秒 = 1 天)

  • 至少对于版本“^4.6.7”来说这是正确的方法 (4认同)
  • 是的,这对我来说也有效,但其他选项没有 (3认同)

lor*_*isi 18

由于SETNX,SETEX,PSETEX将在下一版本中弃用,正确的方法是:

client.set(key, value, 'EX', 60 * 60 * 24, callback);
Run Code Online (Sandbox Code Playgroud)

有关上述内容的详细讨论,请参见此处.


Pra*_*ena 12

您可以一起设置值和到期日.

  //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
  });
Run Code Online (Sandbox Code Playgroud)

  • 它的工作,但最好忽略这个命令..因为在redis文档中:“ **_注意:由于SET命令选项可以替换SETNX,SETEX,PSETEX,因此在Redis的未来版本中这三个命令可能会被弃用,最后已删除。_** " [redis 设置命令](https://redis.io/commands/set) (2认同)