我正在尝试在java中实现一个一致的基于散列的算法,使用以下引用将关键字分片为redis -
Stanford Theory on CH
我正在尝试理解为节点和键生成hascode的最佳方法。目前,我使用DigestUtils生成散列,如下所示&将返回值添加到环/圆中-
private BigInteger hash(String key) {
return new BigInteger(DigestUtils.md5Hex(key.getBytes()), 16);
}我想知道这种方法听起来是否正确。
发布于 2017-07-18 06:14:23
如果您查看Memcache的源代码spymemcached client,您可以看到该客户端是如何实现Ketama一致性散列算法的。关注以下文件:
虽然不是专门针对Redis的,但原则是相同的。
发布于 2017-07-19 19:59:30
Redisson对分片的Map和Set对象使用highwayhash算法。该算法具有较好的分布特性。
下面是一个引用implementation的用法示例
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);https://stackoverflow.com/questions/45153696
复制相似问题