💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ### 哈希算法 ***** 当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。 Redis `计算哈希值`和`索引值`的方法如下: ``` // 使用字典设置的哈希函数,计算键 key 的哈希值 hash = dict->type->hashFunction(key); // 使用哈希表的 sizemask 属性和哈希值,计算出索引值 // 根据情况不同, ht[x] 可以是 ht[0] 或者 ht[1] index = hash & dict->ht[x].sizemask; ``` eg:将一个键值对k0和v0添加到字典里面: * 程序先使用语句:hash = dict->type->hashFunction(k0), 计算键 k0 的哈希值 * 假设计算得出的哈希值为 8 , 那么程序会继续使用语句:index = hash & dict->ht\[0\].sizemask = 8 & 3 = 0; * 计算出键 k0 的索引值 0 , 这表示包含键值对 k0 和 v0 的节点应该被放置到哈希表数组的索引 0 位置上 ![GPcLb8.png](https://s1.ax1x.com/2020/03/27/GPcLb8.png) ### MurmurHash2 ***** 当字典被用作数据库的底层实现,或者哈希键的底层实现时,Redis使用算法来计算键的哈希值。 `MurmurHash算法`最初由Austin Appleby于2008年发明,这种算法的优点在于,即使输入的键是有规律的,算法仍能给出一个很好的随机分布性,并且算法的计算速度也非常快。 `MurmurHash算法`目前的最新版本为MurmurHash3,而Redis使用的是`MurmurHash2`,关于MurmurHash算法的更多信息可以参考该算法的主页:http://code.google.com/p/smhasher/。