#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, сообщение о недействительности все равно будет отправлено. Таким образом, мы можем игнорировать номера баз данных, уменьшая как использование памяти, так и сложность реализации «.