首页 > 解决方案 > Redis DEL 与 LRU 驱逐?

问题描述

如果我使用 redis 检查历史上是否已处理或当前正在处理唯一消息(以防止 Pub/Sub 重复消息处理),并且我不希望再次阅读此 kv 对,我是否应该打扰删除 kv pair 在消息处理程序的末尾,还是让 LRU eviction 最终删除它?消息的处理将花费比重复消息之间的延迟更长的时间。

对于上下文,这是处理过程的一些 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 事务更占用资源?如果是这样,多少?

标签: redispublish-subscribe

解决方案


最好的方法是在将消息添加到 Redis 时提供 TTL(生存时间)。

即 registerMessageInRedis(message.ID, ttl)

这将在 ttl 过期后自动删除消息,并将节省额外的网络往返成本以进行显式删除。


推荐阅读