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通过异常反馈,智能地同步了客户端与服务端的集群信息。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • enum和int、string的转换操作

    enumCountries{中国=5,美国,俄罗斯,英国,法国}enum和intenum->intintnum=(int)Countries.中国; 

    2021年12月25日
  • @Html.DropDownList[通俗易懂]

    @Html.DropDownList[通俗易懂]page@Html.DropDownList("ID",Model.SystemParameterList)ViewModel:publicIEnumerable<

  • ftp下载工具,6款能够满足所有需求的ftp下载工具[通俗易懂]

    ftp下载工具,6款能够满足所有需求的ftp下载工具[通俗易懂]Ftp下载工具俗称来讲就是Ftp工具,是我们常用的一个服务。Ftp下载工具主要是网络上用来传送文件的工具。但有些Ftp软件传输文件不是特别稳定。今天就来为大家分享3款非常好用和用户满意度最高的Ftp下载工具。第一款:IIS7服务器管理工具这款软件的Ftp客户端做的是非常棒的,不仅具有批量操作功能,还具有定时同步(上传和下载)和自动更新功能。这些功能真的是我超爱的功能,做事效率提高了不止一星半点。而且特别容易上手,一般的软件都还需要熟悉一下,这个就是很快的能开始运用。好处很多,需要用户慢慢去体会。有的东西

  • 订单支付功能测试

    订单支付功能测试支付金额1.小于最小值,如:小于0.012.大于最大值/金额上限3.无实际意义金额,如0元4.格式错误(负数、非数字)5.余额小于实际需要支付的金额6.超过第三方支付接口当日消费/单笔消费金额支付接口第三方接口,微信/支付宝/网银系统/post机终端服务→可以参照:https://mp.csdn.net/postedit/100169648…

  • android开机动画多长时间_Android开机动画及黑屏[通俗易懂]

    android开机动画多长时间_Android开机动画及黑屏[通俗易懂]platform:RK3399OS:Android7.11.Android各阶段动画Android动画主要分为关机充电动画和开机动画;开机动画又分为三个阶段:uboot阶段动画、kernel阶段动画、Android阶段动画。1.1uboot开机动画Uboot阶段由于大部分环境和驱动没有准备好,所有此阶段显示直接采用的framebuffer;而且严格来说只是图片,并不是动画。要在uboot阶…

发表回复

您的电子邮箱地址不会被公开。

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