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