ShardedJedis和JedisCluster有什么区别?

时间:2015-04-13 10:20:24

标签: java redis jedis

所以我有两种不同的方法可以在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);

现在我怀疑为什么会有这两种不同的方法,它们之间的基本区别是什么?

2 个答案:

答案 0 :(得分:0)

Sharding是第一个在不同节点(Redis实例)中分发数据的实现,现在您可以使用群集来透明地访问和分发数据。

答案 1 :(得分:0)

ShardedJedis在逻辑上创建分片,因此它不支持H / A(故障转移),并重新分配密钥(因为密钥分发基于算法,​​我们无法动态更改)。

虽然Redis不关心集群功能,但目前大部分可以使用ShardedJedis完成的工作都是使用RedisCluster(JedisCluster)完成的。

一个很大的区别是节点故障。 ShardedJedis不关心H / A,因此一个节点的故障不会导致整个集群失败。 (但您无法访问崩溃节点中的密钥)但Redis Cluster将情境视为CLUSTERDOWN,因此您应准备从属节点,以便Redis群集可以触发故障转移。