用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集群的主要内容,如果未能解决你的问题,请参考以下文章
Java操作redis客户端Jedis连接集群(Cluster)
Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)