所以我有两种不同的方法可以在Jedis中使用Redis集群:
方法1 链接here
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
JedisShardInfo si = null;
si = new JedisShardInfo("10.7.2.242", 7003);
shards.add(si);
si = new JedisShardInfo("10.7.2.242", 7004);
shards.add(si);
si = new JedisShardInfo("10.7.2.242", 7005);
shards.add(si);
ShardedJedis jedis = new ShardedJedis(shards);
jedis.set("foo_first", "foo");
方法2 链接here
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("10.7.2.242", 7003));
jedisClusterNodes.add(new HostAndPort("10.7.2.242", 7004));
jedisClusterNodes.add(new HostAndPort("10.7.2.242", 7005));
System.out.println("cluster node set initialised");
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo_first", "bar");
String value = jc.get("foo_first");
System.out.println(value);
现在我怀疑为什么会有这两种不同的方法,它们之间的基本区别是什么?
答案 0 :(得分:0)
Sharding是第一个在不同节点(Redis实例)中分发数据的实现,现在您可以使用群集来透明地访问和分发数据。
答案 1 :(得分:0)
ShardedJedis在逻辑上创建分片,因此它不支持H / A(故障转移),并重新分配密钥(因为密钥分发基于算法,我们无法动态更改)。
虽然Redis不关心集群功能,但目前大部分可以使用ShardedJedis完成的工作都是使用RedisCluster(JedisCluster)完成的。
一个很大的区别是节点故障。 ShardedJedis不关心H / A,因此一个节点的故障不会导致整个集群失败。 (但您无法访问崩溃节点中的密钥)但Redis Cluster将情境视为CLUSTERDOWN,因此您应准备从属节点,以便Redis群集可以触发故障转移。