我有一个用例,我要进行聚合,直到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到达时,我就会做两件事。我将其附加到带有uniqueEventHashuniqueEventHash行上,然后我还随后将append上的TTL重置为60。

当该expiry:uniqueEventHash事件停止到达时,将删除第二个uniqueEventHash,并将通知发送给订户expiry:expiry:uniqueEventHash事件。消息中的密钥已过期,在这种情况下为EXPIRY

然后,我可以执行以下操作:
// pseudo code
onExpiryEvent(message):

    [type, key] = eventMessage.split(':');
    aggregatedValue = await getByKey(key);
    del(key);

10-04 20:29