美文网首页我爱编程
jedis分片原理剖析

jedis分片原理剖析

作者: 小雪的笔记 | 来源:发表于2018-04-09 20:20 被阅读0次

    Redis2.0+版本不支持服务器分片,只能通过jedis分片,3.0+以上支持hash槽的服务端分片。jedis的详细分片实现如下,其中murmurhash是当前主流的分片算法。

    /**

    * 机器分片的方式

    * 注意jedis服务器影响分片的两个因素

    * 1、权重

    * 2、添加的顺序

    * @param args

    */

    public static void main(String[] args){

    TreeMap nodes = new TreeMap();

    ShardJedisTest murmurHash = new ShardJedisTest();

    List shards = new ArrayList();

    JedisShardInfo jedisShardInfo1 = new JedisShardInfo("172.20.158.140", 5415,3000, 20);

    jedisShardInfo1.setPassword("test1234");

    shards.add(jedisShardInfo1);

    JedisShardInfo jedisShardInfo2 = new JedisShardInfo("172.20.158.140", 5414,3000, 20);

    jedisShardInfo2.setPassword("test1234");

    shards.add(jedisShardInfo2);

    for (int i = 0; i != shards.size();++i) {

    final JedisShardInfo shardInfo = shards.get(i);

    if (shardInfo.getName() == null)

    for (int n = 0; n < 160 * shardInfo.getWeight(); n++) {

    nodes.put(murmurHash.hash("SHARD-" + i + "-NODE-" + n), shardInfo);

    }

    else

    for (int n = 0; n < 160 * shardInfo.getWeight(); n++) {

    nodes.put(murmurHash.hash(shardInfo.getName()+ "*" + shardInfo.getWeight() + n), shardInfo);

    }

    }

    String key ="USER_KEY_3010040405052";

    long murmurhashCode = murmurHash.hash(key);

    JedisShardInfo jedisShardInfo =null;

    SortedMap tail = nodes.tailMap(murmurhashCode);

    if (tail.size() == 0) {

    jedisShardInfo = (JedisShardInfo) nodes.get(nodes.firstKey());

    }

    jedisShardInfo= tail.get(tail.firstKey());

    System.out.println("key:"+key+" murmurhashCode:"+murmurhashCode+" jedisShardInfo:"+jedisShardInfo);

    }

    相关文章

      网友评论

        本文标题:jedis分片原理剖析

        本文链接:https://www.haomeiwen.com/subject/mrhwhftx.html