您好,登錄后才能下訂單哦!
如何分析Redis字典的基礎,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Redis的字典數據結構跟Java的HashMap一樣,也是數組+鏈表結構,數組是hash的位置,hash碰撞的值保存到鏈表種。但是跟HashMap不同的是Redis字典存儲的值都是字符串類型的,而HashMap存儲的值是所有數據類型
常見操作
>hset user name mango(ingeter)1>hmset user age 18 gender "男" OK>hlen user (ingeter)3 >hget user name "mango" >hgetall user "name" "mango" "age" "18" "gender" "男"
當然我們之前說過字典里面的value只能保存string,我們知道字符串類型是可以計數的,字典里面的計數命令是hincrby和incr使用方式一樣。
>hincrby user age 1(integer)18
在這里我們不禁的想起一個事情,我們在存儲一個對象的時候是使用字符串保存json,還是用字典保存在容器里面呢?這里我們想明白一個事情就是,保存在字符串的數據每次獲取的時候都是獲取所有的字段,有時候我們只想獲取對象的某個字段這里最好是使用字典存儲,因為字典是可以返回某個字段的值,相對于獲取整個對象來說還是相對節約網絡流量的。
那么字典我們知道,當鏈表的數據超過最大的鏈表數或者hash數組滿了的時候,這個字典會進行擴容。那么在Java中HashMap是通過復制一份新的空間然后遍歷整個原表重新存儲到新的表里。
但是在redis不同,如果我們進行復制的話就會占用資源堵塞其他的操作,那么我們Redis字典是如何處理的呢?
在Redis中我們有一種名叫“漸進式”的操作,啥意思?就是我們在rehash的時候會創建一個新的字典,查詢時會同時查詢兩個hash結構,然后在后續的定時任務以及hash操作指令中,循序漸進地將舊hash的內容一點點地遷移到新的hash結構中。當搬遷完成了,就會使用新的 hash 結構取而代之。
值得注意的是:當移除容器最后一個元素時,該數據結構會被刪除,此時內存被回收。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。