坑——Redis集群key事件通知

redis集群的key事件通知不像普通的订阅发布消息,普通的订阅发布,在任何一个节点订阅通道,都可以收到消息,但是集群的key事件通知只在key所在的主从节点发出通知,只能通过订阅这个key所在的主从节点收到消息;

实验:

构建一个redis集群:

由6个redis服务端构成的redis三主三从集群,9001主9005从,9002主9006从,9003主9004从;

然后,分别用6个客户端以集群模式连接9001至9006,并分别使用 PSUBSCRIBE * 批量订阅所有通道:

然后再用一个客户端以集群模式连接reids集群,发布一个消息:PUBLISH A helloworld,其他6个客户端都可以收到消息:

然后设置集群的key事件,(可以使用./redis-cli -a 密码 --cluster call 192.168.1.66:9001 config set notify-keyspace-events "KE\$"直接给集群所有服务端设置)

使用客户端设置一个string类型的键值,例如:set a a

可以看到分配到9003上了,从是9004,也只有这两个集群节点有收到事件通知:

再用客户端设置一个:set b b

b是保存在9001上,从是9005:

客户端设置一个:set c c

c保存在9002上:

没有很好的解决方法,只能看使用的redis连接工具框架支持到什么程度了,之前用的jedis也没有优化这方面,Lettuce倒是优化了,记得可以使用StatefulRedisClusterPubSubConnection类的setNodeMessagePropagation(true)方法传递,python的redis库好像也没有优化;

框架不支持这种消息传递的,只能通过集群获得每个节点,然后每个节点都订阅一下keyspace事件,然后收到消息肯定是主从都会收到,需要根据需求,根据节点的类型是主节点还是从节点进行选择处理那些节点的消息;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值