Redis 雜湊演算法

2022-07-10 18:15:09 字數 963 閱讀 3641

當要將乙個新的鍵值對新增到字典裡面時, 程式需要先根據鍵值對的鍵計算出雜湊值和索引值, 然後再根據索引值, 將包含新鍵值對的雜湊表節點放到雜湊表陣列的指定索引上面。

redis 計算雜湊值和索引值的方法如下:

# 使用字典設定的雜湊函式,計算鍵 key 的雜湊值

hash = dict->type->hashfunction(key);

# 使用雜湊表的 sizemask 屬性和雜湊值,計算出索引值

# 根據情況不同, ht[x] 可以是 ht[

0] 或者 ht[1

舉個例子, 對於圖 4-4 所示的字典來說, 如果我們要將乙個鍵值對k0v0新增到字典裡面, 那麼程式會先使用語句:

hash = dict->type->hashfunction(k0);
計算鍵k0的雜湊值。

假設計算得出的雜湊值為8, 那麼程式會繼續使用語句:

index = hash & dict->ht[0].sizemask = 8 & 3 = 0;
計算出鍵k0的索引值0, 這表示包含鍵值對k0v0的節點應該被放置到雜湊表陣列的索引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,如果刪除多個字段,有乙個欄位不存在,那個所有欄位...