欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

Redis-字典(hash)基础

发布时间:2025/3/17 数据库 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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)基础的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。