日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

redis如何取hash的值_Redis

作者:田湖_怎么了 ? 更新時間: 2023-03-16 編程語言

redis取hash的值

命令:可以取得對應的hash中的具體值

hmget s_account:208 account accountname

結果:“www”

如圖

命令:取得hash中的所有key

hkeys s_account:208

結果:

redis中存值是Hash沖突如何解決

Redis 中的 Hash和 Java的 HashMap 更加相似,都是數組+鏈表的結構.當發生 hash 碰撞時將會把元素追加到鏈表上

我們先來了解下 hash 的內部結構.第一維是數組,第二維是鏈表.組成一個 hashtable.

在 Java 中 HashMap 擴容是個很耗時的操作,需要去申請新的數組,擴容的成本并不低,因為需要遍歷一個時間復雜度為O(n)的數組,并且為其中的每個enrty進行hash計算。加入到新數組中

為了追求高性能,Redis 采用了漸進式 rehash 策略.這也是 hash 中最重要的部分.

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

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

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

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

總結

原文鏈接:https://blog.csdn.net/qq_34652478/article/details/85694191

欄目分類
最近更新