首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java实现一致性哈希算法

用Java实现一致性哈希算法
EN

Stack Overflow用户
提问于 2017-07-18 05:07:38
回答 2查看 1.6K关注 0票数 0

我正在尝试在java中实现一个一致的基于散列的算法,使用以下引用将关键字分片为redis -

Stanford Theory on CH

我正在尝试理解为节点和键生成hascode的最佳方法。目前,我使用DigestUtils生成散列,如下所示&将返回值添加到环/圆中-

代码语言:javascript
复制
private BigInteger hash(String key) {
    return new BigInteger(DigestUtils.md5Hex(key.getBytes()), 16);
}

我想知道这种方法听起来是否正确。

EN

回答 2

Stack Overflow用户

发布于 2017-07-18 06:14:23

如果您查看Memcache的源代码spymemcached client,您可以看到该客户端是如何实现Ketama一致性散列算法的。关注以下文件:

虽然不是专门针对Redis的,但原则是相同的。

票数 1
EN

Stack Overflow用户

发布于 2017-07-19 19:59:30

Redisson对分片的Map和Set对象使用highwayhash算法。该算法具有较好的分布特性。

下面是一个引用implementation的用法示例

代码语言:javascript
复制
long[] KEY = {0x9e3779b97f4a7c15L, 0xf39cc0605cedc834L, 0x1082276bf3a27251L, 0xf86c6a11d0c18e95L};

byte[] data = new byte[] {1, 2, 3, 4, 5};

// getting 128 bits hashing
long[] hash128 = HighwayHash.hash128(data, 0, data.length, key);
// getting 256 bits hashing
long[] hash256 = HighwayHash.hash256(data, 0, data.length, key);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45153696

复制
相关文章

相似问题

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