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)
上一篇 2022年10月15日 上午6:46
下一篇 2022年10月15日 上午6:46


相关推荐

  • tcp攻击脚本_防御的意思

    tcp攻击脚本_防御的意思目录相关原理(tcp基础)实例演示关于防御措施相关原理(tcp基础)三次握手:TCP是基于IP网络层之上的传输层协议,用于端到端的可靠的字节流传输。过程:1.C向S发送连接请求,标记位SYN设为1,且随机设置序列号seq2.S返回确认消息,ACK设为seq+1,标记位SYN设为1,随机序列号seq3.C返回确认消息,ACK设为seq+1四次挥手:四次挥手指正常连接中断的情况。过程:…

    2026年4月20日
    4
  • java环境变量怎么配置_java环境变量设置怎么配置

    java环境变量怎么配置_java环境变量设置怎么配置展开全部1.先下载jdk安装程序,搜62616964757a686964616fe58685e5aeb931333365656636索【jdk】,进入jdk下载官网。虽然在其他网站也可以下载,但个人经验来说,去官网下载安全最有保障,这里我推荐去官网下载。2.进入官网,找到下载按钮,如图标记,点击按钮进入下载选择页面。3.进入选择下载页面之后,如图选择接受安装协议,然后针对个人pc的操作系统选择相应…

    2022年7月7日
    19
  • sha1解密的方法,分享实用的sha1在线解密网站

    sha1解密的方法,分享实用的sha1在线解密网站sha1 是一种密码散列函数 是一个用来进行数字签名的算法 这种算法通俗来说 就是接收一段明文 并以不可逆的方式转换成一段密文 通过密文无法知道原文是什么 那么 sha1 算法原理是什么 sha1 如何解密 本文将对这两个问题进行解答 并分享实用的 sha1 在线解密工具

    2026年3月19日
    1
  • drupal安装教程 linux,linux:搭建Drupal

    drupal安装教程 linux,linux:搭建Drupal了解Drupal是使用PHP语言编写的开源内容管理框架(CMF),由内容管理系统(CMS)及PHP开发框架(Framework)共同构成。Drupal具备强大的定制化开发能力,您可使用Drupal作为个人或团体网站开发平台。本文档介绍如何在腾讯云云服务器(CVM)上手动搭建Drupal个人网站。前提LAMP环境:centos7.2MySQL5.7.26ApachePHP7….

    2022年7月20日
    17
  • 使用redis实现分布式锁

    使用redis实现分布式锁简介 当高并发访问某个接口的时候 如果这个接口访问的数据库中的资源 并且你的数据库事务级别是可重复读 Repeatablere 的话 确实是没有线程问题的 因为数据库锁的级别就够了 但是如果这个接口需要访问一个静态变量 静态代码块 全局缓存的中的资源或者 redis 中的资源的时候 就会出现线程安全的问题 案例 github 地址 https github com mzd123 myw

    2026年3月19日
    2
  • 求前缀表达式的值

    求前缀表达式的值7 1 nbsp 求前缀表达式的值 20 nbsp 分 算术表达式有前缀表示法 中缀表示法和后缀表示法等形式 前缀表达式指二元运算符位于两个运算数之前 例如 2 3 7 4 8 4 的前缀表达式是 2 3 74 84 请设计程序计算前缀表达式的结果值 输入格式 输入在一行内给出不超过 30 个字符的前缀表达式 只包含 以及运算数 不同对象 运算数 运算符号 之间以空格分隔 输出格式 输

    2026年3月26日
    2

发表回复

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

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