jedis 的shard使用的是MurmurHash算法(一种非加密型哈希函数),该算法已在nginx,hadoop等开源上使用.

回顾String的hashcode()方法

//把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48char val[] = "111".toCharArray(); int hcode=0;for (int i = 0; i < val.length; i++) {hcode = 31 * hcode + val[i];}

例如业界最好的字符串hash是times33函数,hash=33*hash+str.charAt(i),不过在JAVA里是把33换成31, 这个是K&R给出的函数

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

在《Effective Java》这本书的第三章提到为什么使用31的原因
from Chapter 3, Item 9: Always override hashcode when you override equals, page 48

The value 31 was chosen because it is an odd prime. If it were even and the multiplication overflowed, information would be lost, as multiplication by 2 is equivalent to shifting. The advantage of using a prime is less clear, but it is traditional. A nice property of 31 is that the multiplication can be replaced by a shift and a subtraction for better performance: 31 * i == (i << 5) - i. Modern VMs do this sort of optimization automatically.

(之所以选择31,是因为它是一个奇素数。如果乘数是偶数,因为与2相乘等价于移位运算,并且乘法溢出的话,信息就会丢失。使用素数的好处并不是很明显,但习惯上都是用素数来计算散列结果。31有个很好的特性,即用移位和减法来代替乘法,可以得到更好的性能:31*1==(i<<5)-i)。现代VM可以自动完成这个优化。

不过……,有人指出这个答案是部分错误(The partially wrong answer)在"why do hash functions use prime number" 文章中指真正选择31的原因是31是质数,不是因为它是奇数(is because it is prime-not because it is odd.)质数是不能被其他数整除。

为什么采用质数

转载于:https://www.cnblogs.com/treeliang/p/3615729.html

jedis ShardedJedisPool的 HASH一致性算法(一)从String 的hashcode说起相关推荐

  1. 使用.Net Core实现FNV分布式hash一致性算法

    说到FNV哈希算法不得不提Memcached,我们先简单介绍一下Memcached. Memcached Memcached分为客户端与服务端,Memcached是服务端,服务端本身不提供分布式实现, ...

  2. Hash一致性算法(分片机制)

    一 哈希简介 1.1 简介 我们首先来简单介绍一下什么是哈希(以下简称hash),hash本质来说就是映射,或者说是键值对key-value,不同的hash之间不过就是实现key-value映射的算法 ...

  3. 面试高频题:Hash一致性算法是如何解决数据倾斜问题的?

    一致性Hash是一种特殊的Hash算法,由于其均衡性.持久性的映射特点,被广泛的应用于负载均衡领域,如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案. 本文将介绍一致性H ...

  4. hash一致性算法理解

    http://www.zsythink.net/archives/1182 转载于:https://www.cnblogs.com/huangzelin/p/9662563.html

  5. Redis - Redis分布式算法原理——Hash一致性理解 Hash倾斜性解决方案

    最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大 ...

  6. hash算法_hash一致性算法

    一致性hash算法是,1097麻省理工提出的分布式hashDHT实现算法,极倔internet的热点问题 平衡性 hash结果尽可能的分布到所有的缓存中去,缓冲空间利用率最高 单调性 保持已有的缓存能 ...

  7. 从分布式一致性算法到区块链共识机制

    引言 分布式一致性是一个很"古典"的话题,即在分布式系统中,如何保证系统内的各个节点之间数据的一致性或能够就某个提案达成一致.这个问题想必对于很多技术同学而言并不陌生,几乎在所有的 ...

  8. 分布式一致性算法—— 2PC与3PC

    文章目录 引出 分布式一致性 为什么也叫分布式事务一致性呢? 解决方案 事务的提交与回滚 几种分布式算法 2PC 概念 过程 优缺点 3PC 过程 优缺点 总结 参考文献 引出 分布式一致性 我们的数 ...

  9. 【PHP】PHP实现Hash环/Hash一致性原理实现

    PHP实现Hash环/Hash一致性原理 Hash环可用于Redis机器集群.Mysql的分表操作,扩容时能对最大限度的减少损失 文章开头先引用大佬文章:什么是Hash环 class consisTe ...

最新文章

  1. flutter 切图重命名脚本
  2. Learn About Service Cloud for Agents
  3. 戏说 Windows GDI (2)
  4. stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists解决
  5. 三、Express 路由
  6. 关于地理国情监测(国家测绘局、地理信息系统协会改名及国家级地理信息产业园奠基的风生水起)...
  7. tp5 引入阿里云短信验证码
  8. Android 手机做麦克风扩音器demo
  9. 社会单位消防安全户籍化管理系统——半自动提交V1.0版本
  10. 免费的IT类技术书籍大全
  11. 功率曲线k值_一种基于DTW的改进K-means的日负荷曲线聚类方法技术
  12. 织梦php版本图片不能上传,让dedecms织梦后台支持上传bmp格式的图片的教程
  13. 微信定向流量_使用定向流量包怎么算?微信定向流量包怎样计算流量?
  14. 物料分拣系统matlab仿真,自动物料分拣机器人控制系统设计+Matlab源程序+图纸
  15. python telnet登录OLT查询
  16. Cesium空间分析-填挖方计算
  17. Tensorflow目标检测之yolov3训练自己的模型
  18. 前端的学习之路:初级HTML---超链接的锚点定位
  19. 打造成功电子商务网站的六大设计准则
  20. 信用卡违约预测模型的开发思路

热门文章

  1. python语法基础及if、while、for等语句介绍
  2. jQuery中ajax的4种常用请求方式
  3. 希尔排序(插入排序的优化算法)
  4. 未定义标识符 stringc/c++(20)_20款奔驰G63AMG霸气颜值 运动造型
  5. Linux挂载共享文件
  6. ftp服务器搭建(离线安装vsftpd),配置
  7. 【bzoj5084】hashit 广义后缀自动机+树链的并+STL-set
  8. 【转】Android编码规范建议18条
  9. 用 openSSL 生成 公钥 私钥
  10. win7安装virtualbox遇到的问题