如果我使用redis来检查一个唯一的消息是历史上处理过的还是当前正在处理的(为了防止发布/订阅重复的消息处理),并且我不希望再次读取这个kv对,那么我应该删除消息处理程序末尾的kv对,还是让lru逐出最终删除它?处理消息所需的时间将远远超过重复消息之间的延迟。
对于上下文,这是处理过程的一些js伪代码:
// Message comes in
const messageHandler = (message) => {
const duplicate = checkMessageInRedis(message.ID)
if (duplicate) return
registerMessageInRedis(message.ID)
// ... do some stuff to the message
deleteMessageInRedis(message.ID) // DO I BOTHER WITH THIS??? OR LET EVICTION DELETE IT?
}
我想问题是:逐出删除是否比del事务更占用资源?如果是的话,增加多少?
1条答案
按热度按时间pbossiut1#
最好的方法是在向redis添加消息时提供ttl(生存时间)。
i、 e.registermessageinredis(消息id,ttl)
这将在ttl过期后自动删除消息,并将节省显式删除的额外网络往返成本。