Redis採用的Hash演算法

2021-06-16 08:22:57 字數 573 閱讀 7719

在redis中,採用bernstein的hash演算法,具體**如下:

unsigned int dictgenhashfunction(const unsigned char *buf, int len)
解釋:

把字串轉化成乙個無符號32位int型別,範圍從

0x00000000u到

0xffffffu,但是不可以直接用的hash table的索引。一般情況下dictht資料結構中的

table成員也不會申請如此大的空間。具體做法是,再用hash值與dictht資料結構的sizemask計算取餘數。

idx = h & d->ht[table].sizemask;

根據資料量的增長,不斷地擴充套件dictht

table的空間,這也就是為什麼在dict資料結構中存在兩個

ht[2]成員的原因。同時還會不斷地rehash計算,再把所有的資料都整合到乙個ht中去。具體資料結構見:《

Redis採用的過期策略

懶漢式刪除 定期刪除 懶漢式刪除流程 在進行get或setnx等操作時,先檢查key是否過期 若過期,刪除key,然後執行相應操作 若沒過期,直接執行相應操作 定期刪除流程 簡單而言,對指定個數個庫的每乙個庫隨機刪除小於等於指定個數個過期key 遍歷每個資料庫 就是redis.conf中配置的 da...

hash表 hash演算法

概念 雜湊表 hash table。也叫雜湊表 是依據關鍵碼值 key value 而直接進行訪問的 資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對隨意給定的keyword值ke...

經典的hash演算法 常見hash 雜湊演算法

計算理論中,沒有hash函式的說法,只有單向函式的說法。所謂的單向函式,是乙個複雜的定義,大家可以去看計算理論或者密碼學方面的資料。用 人 類 的語言描述單向函式就是 如果某個函式在給定輸入的時候,很容易計算出其結果來 而當給定結果的時候,很難計算出輸入來,這就是單項函式。各種加密函 數都可以被認為...