Redis: как отличить аннулирование ключей отслеживания клиентов в нескольких базах данных

#redis #cache-invalidation

#redis #недействительность кэша

Вопрос:

Есть ли способ отличить, к какой базе данных применяется недействительность?

пример:

Отслеживающий сокет:

 CLIENT ID // 77
PSUBSCRIBE __redis__:*
  

Основной сокет:

 CLIENT TRACKING on REDIRECT 77 OPTIN

SELECT 1
SET MYKEY VALUE1
CLIENT CACHING YES
GET MYKEY //VALUE1

SELECT 2
SET MYKEY VALUE2
GET MYKEY //VALUE2

SELECT 1
GET MYKEY //VALUE1
  

Проблема, с которой я сталкиваюсь, заключается в том, что сокет отслеживания получает: redis:invalidate 1) MYKEY, когда MYKEY установлен в базе данных 2. Однако ключ, который я хотел отслеживать, находится в базе данных 1.

Если не перепроектировать приложение, чтобы избежать столкновений ключей между базами данных, или создать сокет для каждой базы данных отслеживание, как я могу использовать отслеживание значимым образом?

Редактировать: автономная установка Redis 6.0.8

Ответ №1:

Нашел ответ в документации Redis:

«Существует единое пространство имен keys, не разделенное номерами баз данных. Таким образом, если клиент кэширует ключ foo в базе данных 2, а какой-то другой клиент изменяет значение ключа foo в базе данных 3, сообщение о недействительности все равно будет отправлено. Таким образом, мы можем игнорировать номера баз данных, уменьшая как использование памяти, так и сложность реализации «.