Ваше предположение верно, просто заканчивается один над другим.
EXPIRE не накапливает и не перезагружает или ничего, он просто устанавливает таймер на новое значение.
Пример (без обработки ошибок за многословие):
'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);
});
});
});
(К сожалению для обратного вызова Piramid).
Запуск этого на моей системе:
[[email protected] ~/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
[[email protected] ~/tmp]$
Как вы можете видеть, мы установили истекает время до 10 секунд. Через 6 секунд, очевидно, оставшееся время составляет 4 секунды.
Если мы в этот момент с 4 секундами, установите срок годности на 10, мы просто начнем с 10. Через 3 секунды после этого мы по-прежнему готовы еще на 7 секунд.
У меня такой же сценарий, поэтому я сделал, как вы сказали. Всякий раз, когда я получаю доступ к ключу, я продлеваю его срок действия с новым значением. Это так. – Nebras