MurmurHash算法介绍
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。目前已经被广泛应用到很多开源的项目当中,如Redis,Memcached,Cassandra,HBase,Lucene等。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。它的名字来源于两个基本操作,乘法(MU)和旋转(R),在它的内部循环中使用。与加密散列函数不同,它不是专门设计为难以被对手逆转,因此不适合用于加密目的。
优缺点
优点
- 速度快,比安全散列算法快几十倍
- 变化足够激烈,相似的字符串如“abc”和“abd”能够均匀散落在哈希环上
缺点
- 不保证安全性
算法实现
Guava的Hashing类、Jedis和Cassandra的Util类均提供了MurmurHash算法的Java实现。
Guava使用示例如下所示:
import java.nio.charset.Charset;
import com.google.common.hash.HashCode;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
/**
* @description MurmurHash算法测试类
*/
public class Murmur3_32HashFunctionTest {
public static void main(String[] args) {
HashFunction function = Hashing.murmur3_32();
HashCode hascode = function.hashString("hello1", Charset.forName("utf-8"));
System.out.println(hascode.asInt());
HashCode hascode2 = function.hashString("hello2", Charset.forName("utf-8"));
System.out.println(hascode2.asInt());
HashCode hascode3 = function.hashString("hello3", Charset.forName("utf-8"));
System.out.println(hascode3.asInt());
}
}
网友评论