《Redis設計與實現》 第四章 雜湊演算法

2021-10-10 02:25:50 字數 1205 閱讀 9605

雜湊演算法

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

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

#計算雜湊值

字典設定的雜湊函式——hashfunction(key);,它是dicttype結構中儲存的函式。

所以在計算時,呼叫dict結構中的type指標指向的hashfunction函式。

hash = dict->type->hashfunction(key);
#計算索引值

使用雜湊表(dictht)中的sizemask屬性和雜湊值,計算出索引值。

根據不同情況,ht[x]可以是ht[0/1]。

index = hash & dict->ht[x].sizemask;
示例:

首先擺出乙個空字典

現在在這個空字典裡面新增乙個鍵值對k0和v0到字典裡。

過程如下:

1.計算k0的雜湊值,假設雜湊值為8。

hash = dict->type->dictfunction(k0);
2.通過hash和sizemask屬性計算索引值。

index = hash & dict->ht[0].sizemask = 8 & 3 = 0;//二進位制與運算1000 & 0011 = 0000;
3.這個新的鍵值對就被新增到了ht[0]雜湊表table陣列的索引0位置上。

字典被用作資料庫的底層實現,或者雜湊鍵的底層實現時,redis使用murmurhash2演算法來計算鍵的雜湊值。

murmurhash2演算法優點

即使輸入的鍵是有規律的,演算法仍然可以給出乙個很好的隨機分布性,計算速度也很快。

《Redis設計與實現》 第四章 字典簡介

字典定義 字典,又稱為符號表 symbol table 關聯陣列 associative array 或對映 map 是用於儲存鍵值對的抽象資料結構。字典中的鍵值對 字典中的每個鍵都是獨有的,程式可以在字典中根據鍵查詢與之關聯的值 用鍵查值 通過鍵來更新值,通過鍵刪除整個鍵值對等。redis中的字典...

Linux核心設計與實現 第四章

多工多工系統可以劃分為搶占式多工和非搶占式多工。程序在被搶占之前能夠執行的時間叫時間片。linux採用的就是搶占式多工 io消耗型程序 頻繁處於可執行狀態但是只執行很短的時間。處理器消耗型 時間大多用在執行 上,系統盡量降低其排程頻率而延長執行時間。程序排程要在兩個排程之間尋求平衡 響應時間短和最大...

第四章 vector實現

自己寫的vector比較簡單,大概能滿足一些需求,加深對vector的理解,在下面 include include using namespace std template class vector void fill initialize size type n,const t value 初始化...