jedis和jediscluster_java coroutine

jedis和jediscluster_java coroutine1.JedisCluster类结构JedisCluster是针对RedisCluster的java客户端,它封装了java访问redis集群的各种操作,包括初始化连接、请求重定向等。我们先来看下JedisCluster的类结构:jedisCluster.pngJedisCluster初始化时,所有的集群连接信息都是封装在JedisClusterInfoCache里,由于jedis本身不是线程安全…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. JedisCluster类结构

JedisCluster是针对RedisCluster的java客户端,它封装了java访问redis集群的各种操作,包括初始化连接、请求重定向等。我们先来看下JedisCluster的类结构:

5ca98b5a336b

jedisCluster.png

JedisCluster初始化时,所有的集群连接信息都是封装在JedisClusterInfoCache里,由于jedis本身不是线程安全的,所以使用对象池JedisPool来保证线程安全,在JedisClusterInfoCache中,除了要保存节点和槽的一一对应关系,还要为每个节点建立一个对象池JedisPool,并保存在map。这个类主要用于保存集群的配置信息,并且是JedisCluster初始化部分的核心所在。JedisClusterConnectionHandler是cache类的一个窗口,cache类似数据管理层,而Handler就类似于操控数据提供服务的Service层。

2. JedisCluster调用时序

5ca98b5a336b

jedisClusterSequential.png

从上图可以看出,Jedis建立集群的过程很清晰,传入节点信息,通过其中一个节点从redis服务器拿到整个集群的信息,包括槽位对应关系,主从节点的信息,将这些信息保存在JedisClusterInfoCache中。

JedisCluster的调用流程

Set jedisClusterNode = new HashSet();

jedisClusterNode.add(new HostAndPort(“127.0.0.1”, 7379));

JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT,

DEFAULT_REDIRECTIONS, “cluster”, DEFAULT_CONFIG);

jc.set(“foo”, “bar”);

assertEquals(“bar”, jc.get(“foo”));

5ca98b5a336b

image.png

5ca98b5a336b

clusterNote.png

在发送请求时,JedisCluster对象先从初始化得到的集群map中获取key对应的节点连接,即一个可用的Jedis对象。然后通过这个对象发送get key 命令。

通常,根据key计算槽位得到的节点不会报错。所以如果发生connectionException,或者MovedDataException,说明初始化得到的槽位与节点的对应关系有问题,即与实际的对应关系不符,应当重置map。 如果出现ASK异常,说明数据正在迁移,需要临时使用返回消息指定的地址,重新发送命令。在这里,Jedis通过异常反馈,智能地同步了客户端与服务端的集群信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181867.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【架构设计】领域模型(概念模型) 、逻辑模型、物理模型、贫血模型、充血模型概念总结【待读与标记】[通俗易懂]

    本文选自:http://www.jianshu.com/p/fe45506ea358http://blog.csdn.net/zsy_gemini/article/details/9060105http://wuaner.iteye.com/blog/856450背景关于领域模型的知识应该是有两种,一种是来源于最初的传统软件开发过程,一种来源于领域驱动设计(DDD),这两者很容易混淆。1.领域模…

    2022年4月12日
    52
  • DB9 串口母对母转接头是个坑「建议收藏」

    DB9串口母对母转接头是个坑以前在使用Mini2440开发板时见有人使用「DB9母对母转换头」充当「USB转串口(公)」到「开发板串口(公)」,让杂乱的桌子上少了一根线,让我感到惊奇,原来可以这样,也兴冲冲地购买并使用之。后来的后来,工作不再是烧写烧写系统固件后,慢慢对各种协议标准进一步了解,包括硬件接线的了解。尽管就一个小小的DB9串口接头,公头就应该有一个公头的样子;母头就应该有一个母头的样子。

    2022年4月17日
    40
  • 一致性哈希算法的原理(一致性哈希与哈希的异同)

    (1)一致性哈希算法将整个哈希值空间按照顺时针方向组织成一个虚拟的圆环,称为Hash环;(2)接着将各个服务器使用Hash函数进行哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,从而确定每台机器在哈希环上的位置;(3)最后使用算法定位数据访问到相应服务器:将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针寻找,第一台遇到的服务器就是其应该定位到的服务器

    2022年4月14日
    61
  • vuex mapGetters「建议收藏」

    vuex mapGetters「建议收藏」1、vuex配置//vuex的配置//注意Store是大写conststore=newVuex.Store({//数据保存state:{show:false,count:…

    2022年6月8日
    29
  • VS解决BEX错误但不能关闭DEP保存

    VS解决BEX错误但不能关闭DEP保存

    2022年1月17日
    62
  • 虚拟IP简介「建议收藏」

    虚拟IP简介「建议收藏」什么是虚拟IP虚拟IP(VirtualIPAddress,简称VIP)是一个未分配给真实弹性云服务器网卡的IP地址。弹性云服务器除了拥有私有IP地址外,还可以拥有虚拟IP地址,用户可以通过其中任意一个IP(私有IP/虚拟IP)访问此弹性云服务器。同时,虚拟IP地址拥有私有IP地址同样的网络接入能力,包括VPC内二三层通信、VPC之间对等连接访问,以及弹性公网IP、VPN、云专线等网络接入。多个主备部署的弹性云服务器可以在绑定虚拟IP地址时选择同一个虚拟IP地址。用户可以为该虚拟IP地址绑定一个弹

    2022年10月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号