#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 и сэкономит на дополнительной стоимости поездки по сети в оба конца для явного удаления.