【问题标题】:Redis - How to expire key dailyRedis - 如何每天使密钥过期
【发布时间】:2015-08-14 10:40:20
【问题描述】:

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

这就是我设置密钥的方式:

client.set(key, body);

所以设置过期时间:

client.expireat(key, ???);

有什么想法吗?我将它与 nodejs 和sailsjs 一起使用 谢谢!

【问题讨论】:

  • 你使用的是哪个redis npm模块,是不是所有redis npm模块都支持expireat()函数。 ?

标签: node.js unix redis timestamp sails.js


【解决方案1】:

如果您想在 24 小时后过期

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

或者,如果您希望它恰好在今天结束时过期,您可以在 new Date() 对象上使用 .setHours 来获取一天结束时的时间,并使用它。

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

【讨论】:

  • 记录在哪里?
  • 我没能在任何记录的地方找到这个?你是怎么找到这个的?
  • expiresat 是同步还是异步?我有很多问题
  • @laggingreflex 真的是new Date 前面的+ 符号吗?
  • 如何在redis中设置从不过期?
【解决方案2】:

您可以同时设置价值和到期日。

  //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
  });

【讨论】:

  • 它的工作,但最好忽略此命令.. 因为在 redis 文档中:" 注意:由于 SET 命令选项可以替换 SETNX、SETEX、PSETEX,因此有可能在Redis 的未来版本将弃用并最终删除这三个命令。 " redis set command
【解决方案3】:

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

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

有关上述内容的详细讨论,请参阅here

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2020-04-19
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2012-08-04
    • 2017-09-18
    相关资源
    最近更新 更多