用jedis连接Redis集群

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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() 可以尝试找出它转到哪个实例,但不能保证您设置的密钥从一开始就在同一个实例上。由于故障转移,它可能已经移动。

【讨论】:

以上是关于用jedis连接Redis集群的主要内容,如果未能解决你的问题,请参考以下文章

redis4.0 集群,jedis客户端连接踩坑

redis-Jedis连接集群

Java操作redis客户端Jedis连接集群(Cluster)

Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)

使用 jedis 客户端从春季开始的 aws Redis 集群

Redis Cluster集群搭建后,客户端的连接研究(Spring/Jedis)(待实践)