亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

基本介紹

Hash 也可以用來存儲用戶信息,和 String 不同的是 Hash 可以對用戶信息的每個字段單獨存儲,String 則需要序列化用戶的所有字段后存儲.并且 String 需要以整個字符串的形式獲取用戶,而 hash可以只獲取部分數據,從而節約網絡流量.不過 hash 內存占用要大于 String,這是 hash 的缺點.

> hset books JAVA "Effective java"
(integer) 1
> hset books golang "concurrency in go"
(integer) 1
> hget books java
"Effective java"
> hset user age 17
(integer) 1
>hincrby user age 1 #單個 key 可以進行計數 和 incr 命令基本一致
(integer) 18

redis 中的 Hash和 Java的 HashMap 更加相似,都是數組+鏈表的結構.當發生 hash 碰撞時將會把元素追加到鏈表上.值得注意的是在 Redis 的 Hash 中 value 只能是字符串.

內部原理

看完基本介紹之后,我們先來了解下 hash 的內部結構.第一維是數組,第二維是鏈表.組成一個 hashtable.

作為一名資深程序員,Redis中 Hash的原理你知道嗎?

 

部分源碼:

struct dictht {
 dictEntry **table; //entry 數組
 long size; //數組長度
 long used //數組中的元素個數
 ...
}
struct dictEntry{
 void *key; //hash 的 key
 void *val; //hash 的 value
 dictEntry *next; //下一個dictEntry 鏈表結構
}

在 Java 中 HashMap 擴容是個很耗時的操作,需要去申請新的數組,為了追求高性能,Redis 采用了 漸進式 rehash 策略.這也是 hash 中最重要的部分。

 

漸進式 rehash

在 hash 的內部包含了兩個hashtable,一般情況下只是用一個.如圖所示:

作為一名資深程序員,Redis中 Hash的原理你知道嗎?

 

在擴容的時候 rehash 策略會保留新舊兩個 hashtable 結構,查詢時也會同時查詢兩個 hashtable.Redis會將舊 hashtable 中的內容一點一點的遷移到新的 hashtable 中,當遷移完成時,就會用新的 hashtable 取代之前的.當 hashtable 移除了最后一個元素之后,這個數據結構將會被刪除.如圖所示:

作為一名資深程序員,Redis中 Hash的原理你知道嗎?

 

數據搬遷的操作放在 hash 的后續指令中,也就是來自客戶端對 hash 的指令操作.一旦客戶端后續沒有指令操作這個 hash.Redis就會使用定時任務對數據主動搬遷.

正常情況下,當 hashtable 中元素的個數等于數組的長度時,就會開始擴容,擴容的新數組是原數組大小的 2 倍.如果 Redis 正在做 bgsave(持久化) 時,可能不會去擴容,因為要減少內存頁的過多分離(Copy On Write).但是如果 hashtable 已經非常滿了,元素的個數達到了數組長度的 5 倍時,Redis 會強制擴容。

 

當hashtable 中元素逐漸變少時,Redis 會進行縮容來減少空間占用,并且縮容不會受 bgsave 的影響,縮容條件是元素個數少于數組長度的 10%。

分享到:
標簽:Redis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定