问题描述
我已经设置了具有 2 个集群的 Azure Redis 缓存服务。我正在使用 StackExchange.Redis 与缓存通信。我使用基于 SSL 的连接字符串按照 Azure 门户中的建议进行连接。
问题:
我有多个连接到 Redis 的服务实例。当我从一个节点删除密钥时,我希望在我的服务的其他实例中捕获它(用于本地内存缓存失效)。但是,我注意到并非所有服务实例都收到键删除事件。
我确实在所有实例中都收到了 Pub/Sub 事件,但似乎没有通过所有 Redis 集群传递 Keyspace 通知。我已经尝试使用 __keyevent@0:__:del 进行测试,因为我注意到了这个问题。
按如下方式初始化我的 ConnectionMultiplexer:
library(dplyr)
library(purrr)
library(tibble)
nm1 <- names(pland_pred)[startsWith(names(pland_pred),'y')]
pland_pred[nm1] <- map(nm1,~
pland_pred %>%
transmute(!! .x := (lc_names %>%
select(.x,lc_name) %>%
deframe)[as.character(!!rlang::sym(.x))]) %>%
pull(1))
我仔细研究了 https://github.com/redis/redis/issues/2541 并发现密钥空间通知不会跨集群传递,根据问题 - 解决方案是将客户端与所有主服务器连接,在我的情况下,Redis 通过 Azure 设置,但不太清楚关于如何指定所有主节点(地址)。
任何帮助将不胜感激。提前致谢。
更新: Redis 客户端的 Nuget:StackExchange.Redis.StrongName 1.2.6
解决方法
有一个 open PR 来添加对集群密钥空间通知的支持。一种解决方法是使用 redis pub/sub 自己处理密钥失效……您只是无法获得对密钥过期的自然 redis TTL 支持。