EXPIRE Redis键如果没有修改

如果在最近的x分钟内没有修改该值,是否有直接的方式来EXPIRRE一个redis键?

我怀疑这是可能的 – 但我想知道是否有本地解决scheme或一些非常小的逻辑和/或额外的状态。

现在,这个行为可能已经存在 – 我调用一个关键的EXPIRE。 那么如果我在该密钥上调用SET,我可以再次调用EXPIRE,并且密钥将会以新的值不旧的方式进行EXPIRE?

  • 我如何使用arr.forEach来调用asynchronousJavaScript的redis调用?
  • NodeJS:我无法使express-connect连接到redis
  • Socket io在重新连接时连接到多个套接字
  • 添加哈希来设置成员 - 节点 - 重做
  • 在node.js和redis中使用护照进行授权
  • 使用redis作为pub-sub时不需要的多个消息
  • 获取locking关键字redis-lock nodejs的例外情况
  • Node-Redis用自定义消息订阅
  • 你的假设是正确的,只是一个在另一个之上。

    EXPIRE不累积或重置或任何东西,只是将计时器设置为新的值。

    例子(没有error handling的错误):

    'use strict'; let client = require('redis').createClient() const KEY = 'my:key'; const TTL = 10; let value = 'some-value'; client.on('ready', function() { console.log('Setting key...') client.set(KEY, value, function() { console.log('Setting expire on the key...'); client.expire(KEY, TTL, function() { console.log('Waiting 6 sec before checking expire time...'); // Check in 6 seconds, ttl should be around 6 setTimeout(function() { client.ttl(KEY, function(err, expiryTime) { console.log('expiryTime:', expiryTime); // "expiryTime: 6" on my system // expire again to show it does not stack, it only resets the expire value console.log('Expiring key again...'); client.expire(KEY, TTL, function() { // again wait for 3 sec console.log('Waiting 3 more sec before checking expire time...'); setTimeout(function() { client.ttl(KEY, function(err, expiryTime) { console.log('New expiryTime:', expiryTime); // 7 process.exit(); }) }, 3000); }); }); }, 6000); }); }); }); 

    (遗憾的是callback金字塔)。

    在我的系统上运行这个:

     [zlatko@desktop-mint ~/tmp]$ node test.js Setting key... Setting expire on the key... Waiting 6 sec before checking expire time... expiryTime: 4 Expiring key again... Waiting 3 more sec before checking expire time... New expiryTime: 7 [zlatko@desktop-mint ~/tmp]$ 

    如您所见,我们将过期时间设置为10秒。 6秒后,显然剩下的时间是4秒。

    如果我们在那个时刻,4秒钟后,再次设置到10,我们从10.3秒开始重新开始,我们还有7秒钟的时间。