2015-04-13 3 views
0

Так у меня есть 2 разных подходов, где я могу использовать Redis кластер в Jedis:В чем разница между ShardedJedis и JedisCluster

Метод 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 Link 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

@xetorthio Пролить некоторый свет –

ответ

1

Sharding - это первая реализация для распространения ваших данных в разных узлах (экземпляры Redis), теперь вы можете использовать Clustering для доступа и распространения ваших данных прозрачно.

+0

Как можно распространять данные в Sharding. Если вы видите вызов ShardedJedis, мы никогда не рассказываем, в какой осколок помещали данные. Так что его не случай –

+0

Механизм распределения (данных) реализуется методом, называемым «последовательным хешированием», который говорит вам, что ключ X будет вставлен, например, в узел 2. чтобы заставить ключи перейти к определенному узлу, вы можете увидеть https://github.com/xetorthio/jedis/wiki/AdvancedUsage «Закрепить определенные ключи, чтобы перейти в один и тот же осколок». –

+0

механизм, который я вам скажу, прозрачен для режима Shareding and Clustering. –

0

ShardedJedis создает осколки логически, поэтому он не поддерживает H/A (переход на другой ресурс) и перераспределяет ключи (поскольку распределение ключей основано на алгоритме, и мы не можем менять его на лету).

Оно было введено, в то время как Redis не заботится о функции кластера, и в настоящее время большинство работ, которые вы можете сделать с ShardedJedis, выполняются с помощью RedisCluster (JedisCluster).

Одно большое различие заключается в отказе узла. ShardedJedis не заботится о H/A, поэтому сбой одного узла не приводит к сбою всего кластера. (но вы не можете получить доступ к ключам в разбитом узле). Но Redis Cluster рассматривает ситуацию в CLUSTERDOWN, поэтому вы должны подготовить подчиненные узлы, чтобы Redis Cluster мог инициировать переход на другой ресурс.