當要將乙個新的鍵值對新增到字典裡面時, 程式需要先根據鍵值對的鍵計算出雜湊值和索引值, 然後再根據索引值, 將包含新鍵值對的雜湊表節點放到雜湊表陣列的指定索引上面。
redis 計算雜湊值和索引值的方法如下:
# 使用字典設定的雜湊函式,計算鍵 key 的雜湊值hash = dict->type->hashfunction(key);
# 使用雜湊表的 sizemask 屬性和雜湊值,計算出索引值
# 根據情況不同, ht[x] 可以是 ht[
0] 或者 ht[1
舉個例子, 對於圖 4-4 所示的字典來說, 如果我們要將乙個鍵值對
k0
和v0
新增到字典裡面, 那麼程式會先使用語句:hash = dict->type->hashfunction(k0);計算鍵k0
的雜湊值。假設計算得出的雜湊值為
8
, 那麼程式會繼續使用語句:index = hash & dict->ht[0].sizemask = 8 & 3 = 0;計算出鍵k0
的索引值0
, 這表示包含鍵值對k0
和v0
的節點應該被放置到雜湊表陣列的索引0
位置上, 如圖 4-5 所示。當字典被用作資料庫的底層實現, 或者雜湊鍵的底層實現時, redis 使用 murmurhash2 演算法來計算鍵的雜湊值。
Redis的資料分布演算法(雜湊槽)
redis cluster 集群中涉及到了資料分布問題,因為 redis cluster 是多 master 的結構,每個 master 都是可以提供儲存服務的,這就會涉及到資料分布的問題,在新的 redis 版本中採用的是虛擬槽分割槽技術來解決資料分布的問題。除了虛擬槽分割槽技術之外,還有幾種資料...
Redis雜湊命令
1 hset key field value 設定雜湊的乙個字段值 hset person name wuhen 返回 integer 12 hget key field 得到雜湊乙個字段值 hget person name 返回 wuhen 3 hmset key field value fiel...
redis 雜湊函式
redis命令集 hmset keys 欄位名 值 欄位名 值 欄位名 值 hmset keys 欄位名 值 可以追 加欄位,可以修改字段,如果已經存在就會修改,不存在就新增字段 hdel keys 欄位名1 欄位名2 刪除字段,如果欄位不存在返回0,如果刪除多個字段,有乙個欄位不存在,那個所有欄位...