我有一个用例,我要进行聚合,直到TTL在Redis的键/值上达到0为止。据我在文档中所知,检索或后台作业会触发所有过期的密钥,并立即将其删除。
无论如何,我可以“终止”该删除操作并在到期时检索其值吗?或类似的效果?
我的最后一个问题包含用例的上下文:Redis - any way to trigger an event when a value is no longer being actively written to?
最佳答案
我相信我找到了问题的答案。每行将有一个对应的行,约定为expiry:{key}
。
uniqueEventHash: [value1, value2, value3] // no expiry
expiry:uniqueEventHash: {no value} // set TTL to 60
现在,每当一个新的
value
到达时,我就会做两件事。我将其附加到带有uniqueEventHash
的uniqueEventHash
行上,然后我还随后将append
上的TTL重置为60。当该
expiry:uniqueEventHash
事件停止到达时,将删除第二个uniqueEventHash
,并将通知发送给订户expiry:expiry:uniqueEventHash
事件。消息中的密钥已过期,在这种情况下为EXPIRY
。然后,我可以执行以下操作:
// pseudo code
onExpiryEvent(message):
[type, key] = eventMessage.split(':');
aggregatedValue = await getByKey(key);
del(key);