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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

字典

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

  • 哈希表。哈希表主要包含table數組、size、sizemask以及used。table用于保存哈希表節點,保存數據;sizemask為哈希表掩碼用于計算索引;size用于保存table大小;used用于保存已經保存的節點數目,如圖dictht結構體。
  • 哈希表節點。用于保存key-value數據,以及next指針用于指向下一個節點,為了解決哈希沖突而采用的拉鏈法。
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表示字典數據類型;privdata保存了需要傳遞給type指定類型函數的可選參數;ht[2]指向兩個哈希表,一個用于平時保存數據,另一個用于rehash(擴容等)時使用;rehashidx在rehash使用,用于表示當前正在轉移table中第幾個索引的數據。整體結構茹下圖。

哈希算法以及rehash

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

本文為《Redis設計與實現》閱讀筆記

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。