一致性hash算法

从jredis中学习一致性hash算法

风格不统一 提交于 2020-04-06 21:50:10
jredis是redis的java客户端,通过sharde实现负载路由, 一直很好奇jredis的sharde如何实现,翻开jredis源码研究了一番,所谓sharde其实就是一致性hash算法。其实,通过其源码可以看出一致性hash算法实现还是比较简单的。主要实现类是redis.clients.util.Sharded<R, S>,关键的地方添加了注释: public class Sharded<R, S extends ShardInfo<R>> { //S类封装了redis节点的信息 ,如name、权重 public static final int DEFAULT_WEIGHT = 1;//默认权重为1 private TreeMap<Long, S> nodes;//存放虚拟节点 private final Hashing algo;//hash算法 ...... public Sharded(List<S> shards, Hashing algo, Pattern tagPattern) { this.algo = algo; this.tagPattern = tagPattern; initialize(shards); } private void initialize(List<S> shards) { nodes = new TreeMap<Long, S>