【愚公系列】2022年05月 .NET架构班 047-分布式中间件 Redis存储原理之Hash
【摘要】 前言hash类似map的一种结构,可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)缓存在redis里,然后每次读写缓存的时候,可以操作hash里的某个字段。key=愚公value={ id: 150, name: “zhangsan”, age: 20}hash的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某...
前言
hash类似map的一种结构,可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)缓存在redis里,然后每次读写缓存的时候,可以操作hash里的某个字段。
key=愚公
value={
id: 150,
name: “zhangsan”,
age: 20
}
hash的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。
一、Redis存储原理之Hash
1. Hash结构
数组+Hash+单向链表。
Redis 的 Hash 本身也是一个 KV 的结构。外层的哈希(Redis KV 的实现)只用到了 hashtable。当存储 hash 数据类型时, 我们把它叫做内层的哈希。
内层的哈希底层可以使用两种数据结构实现:
- ziplist:OBJ_ENCODING_ZIPLIST(压缩列表)
- hashtable:OBJ_ENCODING_HT(哈希表)
一个哈希对象超过配置的阈值(键和值的长度有>64byte 或 键值对个数>512 个)时, 会转换成哈希表(hashtable)。
2.Hash编码类型
Hash的编码有三种:
- int:存储 8 个字节的长整型(long,2^63-1)。大小超过了 long 的范围
(2^63-1=9223372036854775807)时会自动转成embstr。 - embstr:代表 embstr 格式的 SDS(Simple Dynamic String 简单动态字符串), 存储小于 44
个字节的字符串。分配一次内存空间,而且是只读的。 - raw:存储大于 44 个字节的字符串(3.2 版本之前是 39 字节)。分配二次内存空间。
3.应用场景
场景 | 说明 |
---|---|
String | String可以做的事情,Hash 都可以做。 |
存储对象类型的数据 | 对象或者一张表的数据,比 String 节省了更多 key 的空间,也更加便于集中管理。 |
购物车 | 用户 id、商品数量。 |
4.Hash和String区别
- 把所有相关的值聚集到一个 key 中,节省内存空间
- 只使用一个 key,减少 key 冲突
- 当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)