EXPIRE Redis键如果没有修改

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

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

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

你的假设是正确的,只是一个在另一个之上。

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秒钟的时间。