先来看看扩容的场景,假如业务量激增,系统需要进行扩容增加一台服务器node-4,刚好node-4被映射到node-1和node-2之间,沿顺时针方向对象映射节点,发现原本缓存在node-2上的对象key-4、key
接下来线程二进行扩容操作,此时的key-5和key-1已经存在指向关系。 ? 然后由于线程一存在key-5和key-1的关系是key5—>key1,因此实际上线程二扩容后的真实关系是存在一个环形链表,如下图所示: ?
根据上边的规则,下图中的映射关系: key-1 -> node-1 key-3 -> node-2 key-4 -> node-2 key-5 -> node-2 key-2 -> node-0 如果想要访问某个 先来看看扩容的场景,假如业务量激增,系统需要进行扩容增加一台服务器node-4,刚好node-4被映射到node-1和node-2之间,沿顺时针方向对象映射节点,发现原本缓存在node-2上的对象key-4、key
根据上边的规则,下图中的映射关系: key-1 -> node-1 key-3 -> node-2 key-4 -> node-2 key-5 -> node-2 key-2 -> node 先来看看扩容的场景,假如业务量激增,系统需要进行扩容增加一台服务器node-4,刚好node-4被映射到node-1和node-2之间,沿顺时针方向对象映射节点,发现原本缓存在node-2上的对象key-4、key
// 方案1:添加前缀避免数字键名 const objWithPrefix = { "key-10": "ten", "key-2": "two", "key-1": "one", "key