首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >该如何使用 Guava的Hashing#consistentHash?

该如何使用 Guava的Hashing#consistentHash?

提问于 2018-02-05 01:53:34
回答 3关注 0查看 2.2K

我在编写的java代码中的算法用一致散列。guava哈希库有一个consistentHash(HashCode, int)方法,但是文献相当缺乏。我最初的希望是consistentHash()对于简单的会话关联,可以在一组后端服务器上有效地分配负载。

有没有人有一个例子?特别是如何从目标范围中删除一个桶。

例如:

代码语言:javascript
复制
@Test
public void testConsistentHash() {
    List<String> servers = Lists.newArrayList("server1", "server2", "server3", "server4", "server5");

    int bucket = Hashing.consistentHash(Hashing.md5().hashString("someId"), servers.size());
    System.out.println("First time routed to: " + servers.get(bucket));

    // one of the back end servers is removed from the (middle of the) pool
    servers.remove(1);

    bucket = Hashing.consistentHash(Hashing.md5().hashString("blah"), servers.size());
    System.out.println("Second time routed to: " + servers.get(bucket));
}

输出:

代码语言:javascript
复制
First time routed to: server4
Second time routed to: server5

我希望该标识符(“omeId”)在删除列表前面的服务器后映射到同一台服务器。因此,在上面的示例中,在删除之后,我想我希望桶0映射到“server 1”,桶1映射到“server 3”,桶2映射到“server 4”,桶3映射到“server 5”。

我是否应该维护一个单独的(比列表更复杂)的数据结构来管理桶删除和添加?我想我可能设想了一个更复杂的哈希API,它将在为我添加和删除特定的桶之后管理重新映射。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档