【愚公系列】2022年05月 .NET架构班 047-分布式中间件 Redis存储原理之Hash

举报
愚公搬代码 发表于 2022/05/02 11:26:13 2022/05/02
1.4k+ 0 0
【摘要】 前言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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。