Memcached-探索Memcached-Java-Client的一致性hash算法

1.探索版本

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

2.我们找到目标方法

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

3.追寻源码的踪迹至AscIIClient(这是一个实现了 memcache协议的客户端,具有较高的效率,官方不建议直接使用这客户端,建议使用包装类MemCachedClient)

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

4.继续探索下去,最关键最核心的一步出现了,根据key、hashCode

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

SchoonerSockIOPool是什么东西呢?从文档注释来看,这是一个与服务端通信的长连接池

  • This class is a connection pool for maintaning a pool of persistent

  • connections

  • to memcached servers.

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

来瞄一眼它的初始化。它的初始化是依赖另一个类com.whalin.MemCached.SockIOPool的初始化方法

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

又绕回了 SchoonerSockIOPool的初始化方法

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png
《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png
《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

populateConsistentBuckets 这个就是我们今天分析的重点,这是初始化客户端时进行 对server进行一致性hash分布的一个方法,使用TreeMap进行模拟分布圆环。

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png
《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

再来看,get 方法链路最核心的一步,获取key所在的那个桶。

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png
《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

findPointFor()找到对应hash所在的桶,用的还是 TreeMap的 TailMap 方法,返回hash值等于大于hash(key)的最小server作为存储该key数据的目标server所对应的分布ke.

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

拿到对应的 server地址,获取 connection链接,完毕~~~

《Memcached-探索Memcached-Java-Client的一致性hash算法》 image.png

    原文作者:想做安徒生
    原文地址: https://www.jianshu.com/p/267d2193cc35
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞