![一致性 Hash 原理及 GroupCache 源码分

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

析](https://img-blog.csdnimg.cn/img_convert/59af351626023eb2d1d5b6863617ab62.png)

对于该有序 Hash 环,环中的每个节点对应于一台缓存 Server,同时每个节点也包含一个整数值。各节点按照该整数值从小到大依次排列。

对于指定用户来说,我们依然首先出计算用户名的 hash 值。接着,在 Hash 环中找到 第一个大于等于该 hash 值的节点 ,将其作为目标缓存 Server。

例如,我们 hash 环中的三个节点 Node-A 、 Node-B 、 Node-C 的值依次为 3、7、13。假设对于某个用户来说,我们计算得到其用户名的 hash 值为 9,环中第一个大于 9 的节点为 Node-C,则选用 Node-C 作为该用户的缓存 Server。

缓存失效的缓解

===========

以上就是正常情况下一致性 Hash 的使用,接下来我们看下,一致性 Hash 是如何应对集群的扩缩容的。

当我们对集群进行扩容,新增一个节点 New-Node , 假设该节点的值为 11。那么新的有序 Hash 还如下图所示: