5行代码实现一致性哈希
2015-08-20 10:42
218 查看
你没看错,5行代码实现一致性哈希!好吧,我发现我真是越来越噱头了,原理请自行google,我自己分析了下,特分享出来,这个的一个缺点是加减机器只能从最右开始。
#include <iostream>
int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {
int64_t b = -1, j = 0;
while (j < num_buckets) {
b = j;
key = key * 2862933555777941757ULL + 1;
j = (b + 1) * (double(1LL << 31) / double((key >> 33) + 1));
}
return b;
}
int main(int argc, char* argv[])
{
for (int i = 0; i < 10; i++)
{
std::cout << JumpConsistentHash(i, 10) << ' ';
std::cout << JumpConsistentHash(i, 11) << std::endl;
}
return 0;
}
#include <iostream>
int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {
int64_t b = -1, j = 0;
while (j < num_buckets) {
b = j;
key = key * 2862933555777941757ULL + 1;
j = (b + 1) * (double(1LL << 31) / double((key >> 33) + 1));
}
return b;
}
int main(int argc, char* argv[])
{
for (int i = 0; i < 10; i++)
{
std::cout << JumpConsistentHash(i, 10) << ' ';
std::cout << JumpConsistentHash(i, 11) << std::endl;
}
return 0;
}
相关文章推荐
- ubuntu14.04下配置python环境
- java的垃圾回收
- PHP 使用 curl 提交 json 格式数据(已实践 可行)
- java的垃圾回收
- C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作
- 设计模式实例(Lua)笔记之五(Prototype 模式)
- 关于java的初始化顺序的问题
- C++ 常量
- c#反射
- C++ 内存布局占用情况
- 去掉Eclipse打开后定期弹出Usage Data Upload对话框
- (翻译)什么是Java的永久代(PermGen)内存泄漏
- JAVA正则表达式
- matlab figure界面没有菜单栏的问题
- char和unsigned char强制转换成int后的差异
- C++中vector使用详细说明
- java后台传递json到前台 中文乱码解决方法
- struts2简介----阿冬专栏
- Java注释详解
- 代码检查