Redis-字典(hash)基础
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 結構取而代之。
值得注意的是:當移除容器最后一個元素時,該數據結構會被刪除,此時內存被回收。
?
?
一名正在搶救的coder
筆名:mangolove
CSDN地址:https://blog.csdn.net/mango_love
GitHub地址:https://github.com/mangoloveYu
?
?
總結
以上是生活随笔為你收集整理的Redis-字典(hash)基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DispatcherServlet作用
- 下一篇: nginx反向代理tomcat时遇到一个