当前位置: 首页 > news >正文

坑——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事件,然后收到消息肯定是主从都会收到,需要根据需求,根据节点的类型是主节点还是从节点进行选择处理那些节点的消息;


http://www.mrgr.cn/news/15661.html

相关文章:

  • java中的@注解语法是什么原理,怎么实现的?
  • 破解电商数据分析难题,优化运营策略的秘诀
  • 供应商管理概述及系统软件推荐
  • Git学习尚硅谷(002 git常用命令)
  • 使用docker部署project-exam-system(项目)
  • 羊大师:防疫不松懈:开学季儿童个人防护小贴士
  • 【vue3】详解单向数据流,大家千万不用为了某某而某某了
  • TD学习笔记————中级教程总结(下)
  • RKNPU2从入门到实践 ---- 【9】使用RKNPU2的C API接口将RKNN模型部署在RK3588开发板上
  • JavaWeb——前端工程化
  • 行得稳,跑得远,美团如何做到长期主义持续发力?
  • 已解决**Java OutOfMemoryError: GC Overhead Limit Overload - 问题分析与解决方法**
  • springboot学习(2)
  • 斯坦福UE4 C++课学习补充24:伤害数值
  • 【动态规划】两个数组 / 字符串的dp问题(子序列、子数组问题、匹配问题、字符串问题)
  • 什么是反应诱导重构
  • YoloV8训练参数篇
  • 【IEEE出版 | 往届会后三个月检索 | 院士杰青领衔】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)
  • tail 和 head命令(查看文件内容
  • 数据分析报告练习作业