日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis笔记之基本数据结构 字典

發(fā)布時間:2025/3/11 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis笔记之基本数据结构 字典 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

字典

符號表、關(guān)聯(lián)數(shù)組或者映射,有點類似于java中的map,用于保存鍵值對key-value。字典中的鍵key是獨一無二的。底層實現(xiàn)為哈希表。下面進行簡述:

  • 哈希表。哈希表主要包含table數(shù)組、size、sizemask以及used。table用于保存哈希表節(jié)點,保存數(shù)據(jù);sizemask為哈希表掩碼用于計算索引;size用于保存table大小;used用于保存已經(jīng)保存的節(jié)點數(shù)目,如圖dictht結(jié)構(gòu)體。
  • 哈希表節(jié)點。用于保存key-value數(shù)據(jù),以及next指針用于指向下一個節(jié)點,為了解決哈希沖突而采用的拉鏈法。
typedef struct dictEntry{void *key;union{void *val;uint64_t u64;int64_t s64;} v;struct dictEntry *next; } dictEntry;
  • 字典。主要包含type、privdata、ht[2]、rehashidx幾個屬性。type表示字典數(shù)據(jù)類型;privdata保存了需要傳遞給type指定類型函數(shù)的可選參數(shù);ht[2]指向兩個哈希表,一個用于平時保存數(shù)據(jù),另一個用于rehash(擴容等)時使用;rehashidx在rehash使用,用于表示當(dāng)前正在轉(zhuǎn)移table中第幾個索引的數(shù)據(jù)。整體結(jié)構(gòu)茹下圖。

哈希算法以及rehash

  • 哈希算法。首先,計算key的哈希值然后使用掩碼sizemask求得在table中的索引(例如, hash & sizemask),然后使用頭插法直接插入,使用鏈地址法解決哈希沖突。
  • rehash。當(dāng)哈希表的負(fù)載因子過大或者過小時,需要進行擴展以及壓縮,這個時候需要rehash,也就是需要重新計算當(dāng)前值在新的table中的位置;擴展時,擴展為第一個大于等于ht[0].used*2的2的n次冪、壓縮時,壓縮為第一個大于等于ht[0].used的2的n次冪;負(fù)載因子等于used/size,當(dāng)當(dāng)前正在進行持久化時(BGSAVE或者BGREWRITEAOF),負(fù)載因子大于等于5擴展,平常選擇1,當(dāng)負(fù)載因子小于0.1時,進行壓縮。rehash時,查詢操作,先到ht[0]中查詢,如果沒有再去ht[1]中查詢,插入新數(shù)據(jù)時,直接在ht[1]中插入。rehashidx默認(rèn)為-1,當(dāng)rehash時,保存的為正在轉(zhuǎn)移的ht[0]中table的索引。

本文為《Redis設(shè)計與實現(xiàn)》閱讀筆記

總結(jié)

以上是生活随笔為你收集整理的Redis笔记之基本数据结构 字典的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。