Redis - 如何每天使密钥过期
Posted
技术标签:
【中文标题】Redis - 如何每天使密钥过期【英文标题】:Redis - How to expire key daily 【发布时间】:2015-08-14 10:40:20 【问题描述】:我知道 Redis 中的 EXPIREAT 用于指定密钥何时过期。我的问题是它需要一个绝对的 UNIX 时间戳。如果我希望密钥在一天结束时过期,我很难考虑应该设置什么作为参数。
这就是我设置密钥的方式:
client.set(key, body);
所以设置过期时间:
client.expireat(key, ???);
有什么想法吗?我将它与 nodejs 和sailsjs 一起使用 谢谢!
【问题讨论】:
你使用的是哪个redis npm模块,是不是所有redis npm模块都支持expireat()函数。 ? 【参考方案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。
【讨论】:
以上是关于Redis - 如何每天使密钥过期的主要内容,如果未能解决你的问题,请参考以下文章