說來趕巧,以前我有16個redis集羣,而後我要將某個key根據路由規則存到16個集羣中的某一個上面,正巧用到了這兩種哈希算法,改造完畢上線後,總體帶來的效果也十分理想。java
說道ketamahash,它是一致性哈希算法,通常說來都是由若干固定的虛擬節點來計算出每一個虛擬節點的slots,數據存儲的時候,算出key的slot值,而後存入相鄰最近的虛擬節點。而murmurhash則是散列算法,因爲其計算產生的結果足夠劇烈,因此是目前最好的幾種散列算法之一。它主要用來計算出key的slot值的。有人會問,java中的hashcode也能計算出來呀,可是hashcode計算出來的值的劇烈程度遠遠比不上murmurhash。拿abc和abd來講,hashcode計算出來的差值相差不大,可是murmurhash計算出來的差值則相差甚遠。redis
兩者結合,能夠實現出相似redis cluster使用的路由算法,且效果也是很好的。目前已知的開源中,jedis,memcache,redis等都有采用過,因此將這兩種哈希算法吃透,可謂是如虎添翼。算法
學東西不要急躁,要慢,要注重質量,網絡上看的,源碼中讀的,都屬於紙上得來終覺淺的東西,必定要本身寫,寫完後還能寫成文章講述出來,這樣,你才能算是真正的吃透了。切忌看過一點源碼就高談闊論,卻不知如同浮沙築高臺,經不起推敲。網絡