如何分析Redis字典的基础
如何分析redis字典的基础,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站制作、禅城网络推广、重庆小程序开发、禅城网络营销、禅城企业策划、禅城品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供禅城建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
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 结构取而代之。
值得注意的是:当移除容器最后一个元素时,该数据结构会被删除,此时内存被回收。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
标题名称:如何分析Redis字典的基础
文章起源:http://ybzwz.com/article/jipjge.html