【问题标题】:Connect Redis cluster with jedis用jedis连接Redis集群
【发布时间】:2015-10-13 17:52:41
【问题描述】:

由于单个redis实例不符合我的要求,我选择了redis集群。我用三个节点组成了集群,并将数据填充到集群中。当我使用 JedisCluster 从集群中获取数据时,它比单个实例需要更多时间。那么,将jedis与redis集群连接起来的正确方法是什么。如何利用连接池连接jedis和redis集群?

【问题讨论】:

    标签: redis jedis


    【解决方案1】:

    根据您拥有的集群策略,您在绝地集群中检索数据时观察到延迟是正常的,因为您会从一个绝地转移到另一个绝地以获取数据。红色箭头,是jedis集群查询增加时间的原因。

    访问正确实例的唯一方法是从键中了解数据的位置,在键中引入位置示例: "instance3/user/5" 或查找对键执行计算的位置实例。

    【讨论】:

    • 参见:github.com/xetorthio/jedis/wiki/…。强制keys去同一个shard,之后就可以直接访问shard了
    • 检索密钥的分片信息: ShardInfo si = jedis.getShardInfo(key); si.getHost/getPort/getPassword/getTimeout/getName
    【解决方案2】:

    JedisCluster 创建它自己的池。您可以在创建 JedisCluster 对象时提供池的配置。从那时起,您可以将集群视为单个实例,请求将转到正确的集群实例。

    JedisCluster cluster - new JedisCluster(...); ... cluster.set(key, value);

    getSlot() 可以尝试找出它转到哪个实例,但不能保证您设置的密钥从一开始就在同一个实例上。由于故障转移,它可能已经移动。

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 2018-12-04
      • 1970-01-01
      • 2016-12-10
      • 2020-07-24
      • 2017-06-17
      • 2019-08-03
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多