说来赶巧,之前我有 16 个 redis 集群,然后我要将某个 key 根据路由规则存到 16 个集群中的某一个上面,正巧用到了这两种哈希算法,改造完毕上线后,整体带来的效果也十分理想。
说道 ketamahash,它是一致性哈希算法,一般说来都是由若干固定的虚拟节点来计算出每个虚拟节点的 slots,数据存储的时候,算出 key 的 slot 值,然后存入相邻最近的虚拟节点。而 murmurhash 则是散列算法,由于其计算产生的结果足够剧烈,所以是目前最好的几种散列算法之一。它主要用来计算出 key 的 slot 值的。有人会问,java 中的 hashcode 也能计算出来呀,但是 hashcode 计算出来的值的剧烈程度远远比不上 murmurhash。拿 abc 和 abd 来说,hashcode 计算出来的差值相差不大,但是 murmurhash 计算出来的差值则相差甚远。
二者结合,可以实现出类似 redis cluster 使用的路由算法,且效果也是很好的。目前已知的开源中,jedis,memcache,redis 等都有采用过,所以将这两种哈希算法吃透,可谓是如虎添翼。
学东西不要急躁,要慢,要注重质量,网络上看的,源码中读的,都属于纸上得来终觉浅的东西,一定要自己写,写完后还能写成文章讲述出来,这样,你才能算是真正的吃透了。切忌看过一点源码就高谈阔论,殊不知如同浮沙筑高台,经不起推敲。
版权声明
本博客所有的转载文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者程序诗人和本文原始地址:https://www.cnblogs.com/scy251147/p/11386906.html