Azure redis 集群密钥事件失效事件

问题描述

我已经设置了具有 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 支持。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...