如何分析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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。