java吧 关注:1,241,908贴子:12,713,607
  • 17回复贴,共1

【求助】Jedis如何确认主从关系?各位java吧的大佬,我

只看楼主收藏回复

【求助】Jedis如何确认主从关系?
各位java吧的大佬,我想请教个问题:
目前redis服务器三台(一主二从),sentinel在三个服务器上各部署一个。来基于哨兵模式的主从复制来实现读写分离。
目前java代码使用JedisSentinelPool来获取jedis
,我想问的是 不是读写分离吗?这里getResouce只获取到一个jedis,怎么实现读写分离?这样不是只使用了主库在主库上进行读写吗?还有就是主机宕机了,哨兵会自动投票选举新的主机,在java代码这边,如何自动切换到新主机,或者如何确认主机宕机了?




IP属地:湖南来自Android客户端1楼2020-05-31 14:07回复
    求大佬解惑


    IP属地:湖南来自Android客户端2楼2020-05-31 14:12
    回复
      不懂,看一下别人怎么搞的


      IP属地:浙江来自Android客户端3楼2020-05-31 14:17
      收起回复
        首先,redis自己会在主机出问题进行切换,然后JedisSentinelPool里有个MasterListener可以更换配置


        IP属地:浙江来自Android客户端4楼2020-05-31 14:27
        回复
          这个监听器是个线程,会一直循环执行,中间有个等待时间睡眠,一直动态更新


          IP属地:浙江来自Android客户端5楼2020-05-31 14:31
          回复
            集群的概念你要明白。什么主从复制读写分离那都是内部处理的,对外的使用要做到调用方无感知,那才叫真正的集群。
            就好比微服务中,你一个服务发多个实例,对调用方来说还需要业务上针对性的改代码吗?调用不是基于服务发现和轮询策略的?如果调用方还得耦合这些设计逻辑,那还叫什么cluster?


            IP属地:辽宁6楼2020-05-31 14:31
            收起回复
              redis的服务端,根据哨兵模式会自动调整主从,而java唯一要做的就是轮循监听主机是否正常,不正常就将连接池的信息进行变更
              running 是个线程安全的原子类,保证了改值在多线程情况下的安全性
              有个参数5000是失败情况会间隔多少秒进行重试




              IP属地:浙江来自Android客户端7楼2020-05-31 14:35
              收起回复
                这是spring data redis 的
                spring data redis 并没有切换主机,只是寻找活跃的哨兵


                IP属地:浙江来自Android客户端8楼2020-05-31 14:41
                回复
                  所以Spring.data.redis还是比crazycake. shiro –redis 高明多了
                  crazycake的还会动态修改连接池的配置(读写的逻辑是Redis服务端维护的,只是为了踢掉没用的jedis池化对象)
                  spring.data就完全不管你谁是主谁是从,只找依旧活跃的哨兵获得连接( Redis内部进行读写分离)
                  所以还是Spring.data吊啊
                  不仅可以无视是单机、集群、哨兵
                  还可以随便选择想要的客户端(Jedis, Lettuce,Redssion)
                  垃圾shiro –redis


                  IP属地:浙江来自Android客户端9楼2020-05-31 14:56
                  收起回复
                    @迪恩国王 还有最后一点点有点纠结,如图两次,程序运行期间睡60秒,在这期间,我手动对主库shutdown模拟宕机情况,第一次不flushJedis(),出现异常,程序运行不下去;第二次flushJedis拿到最新的对象后,再运行,运行正常。但是这是手动getResource()的,我应该如何在java代码层自动知道主库挂了,然后自动重新通过getResource()获取jedis对象



                    IP属地:湖南来自Android客户端10楼2020-05-31 15:26
                    收起回复