Redis DEL против выселения LRU?

#redis #publish-subscribe

#redis #опубликовать-подписаться

Вопрос:

Если я использую redis для проверки того, обрабатывалось ли уникальное сообщение исторически или обрабатывается в настоящее время (для предотвращения обработки дубликатов сообщений Pub / Sub), и я не ожидаю, что когда-либо снова прочитаю эту пару 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:

Лучшим подходом было бы указать TTL (время жизни) при добавлении сообщения в Redis.

т.е. registerMessageInRedis(сообщение.Идентификатор, ttl)

Это приведет к автоматическому удалению сообщения после истечения срока действия ttl и сэкономит на дополнительной стоимости поездки по сети в оба конца для явного удаления.