Hash函数特点及经典应用

Hash函数特点:

1.输入域无穷,输出域有限。例如:有无穷多个(在工程中可以具体到多少个,例如1000)输入参数经过hash函数映射后得到有限的输出域{1,2,3,4}。

2.输入参数确定,经过hash函数映射出的返回值一样。(不是随机函数,不同的输入参数可能得到相同的返回值)。

3.输入域上的值经过函数值映射后会几乎均等的分布在输出域上。

补充:得到的输出值%m,也会均匀的分布在0~m上。

经典缓存应用:三台服务器组成集群,要求使三台负载均衡。三台服务器编号0,1,2。服务器可以增加和查询信息,例如可以通过姓名查询出性别,“张三”-“男”。我们为要查询的字符串通过hash函数得到返回值,再用返回值模上3,结果返回0~2之间,所以会均匀分布在0~2之间,服务器实现负载均衡。

        但是,这样会有问题,如果增加或减少服务器,原来服务器存储的是模3的结果,加了服务器需要模4,导致原来服务器里面的数据查询混乱。该怎样解决呢?引入一致性hash。既可以负载均衡,又可以删减自由。另外加入虚拟节点技术。我们把三台服务器的唯一记录方式(例如IP、MAC)计算出hash值,通过虚拟节点技术又将每个服务器分成例如1000个虚拟节点,三台服务器总共3000个虚拟节点,将3000个虚拟节点又经过hash函数,拿路由表记录这些数据对应的真实服务器hash值,计算出结果分布到环形上,此时环形上离散且均等分布。此时,如果加入一台服务器,这台服务器就从均匀分布的环形上存储数据,从服务器0上拿一点数据,从服务器1上拿一点数据,从服务器2上拿一点数据,最后实现负载均衡。通过虚拟节点再返回真实的服务器hash值,找出具体服务器。


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值