对Key or KeyTag 采用同样的hash算法,然后从TreeMap获取大于等于键hash值得节点,取最邻近节点存储,当key的hash值大于虚拟节点hash值得最大值时,存入第一个虚拟节点。
使用方法
定义 shards
1 2 3 4 5 6 7
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); JedisShardInfo si = new JedisShardInfo("localhost", 6379); si.setPassword("123456"); shards.add(si); si = new JedisShardInfo("localhost", 6380); si.setPassword("123456"); shards.add(si);
使用shards
直接使用。
1 2 3
ShardedJedis jedis = new ShardedJedis(shards); jedis.set("a", "foo"); jedis.disconnect;
使用连接池。
1 2 3 4 5 6 7 8
ShardedJedisPool pool = new ShardedJedisPool(new Config(), shards); ShardedJedis jedis = pool.getResource(); jedis.set("a", "foo"); // do your work here pool.returnResource(jedis); // a few moments later ShardedJedis jedis2 = pool.getResource(); jedis.set("z", "bar"); pool.returnResource(jedis); pool.destroy();
获取当前 shards 信息
1 2
ShardInfo si = jedis.getShardInfo(key); si.getHost/getPort/getPassword/getTimeout/getName
keytags
也可以通过 keytags 来确保 key 位于相同的 shard,如:
1
ShardedJedis jedis = new ShardedJedis(shards,ShardedJedis.DEFAULT_KEY_TAG_PATTERN);