当前位置:网站首页>redis中的string类型是怎么组织的?
redis中的string类型是怎么组织的?
2022-06-09 10:34:00 【给我吃一口妖怪】
redis中的String怎么保存数据?
当你保存 64 位有符号整数时,String 类型会把它保存为一个 8 字节的 Long 类型整数,这种保存方式通常也叫作 int 编码方式。
但是,当你保存的数据中包含字符时,String 类型就会用简单动态字符串(Simple Dynamic String,SDS)结构体来保存。
SDS包含三个属性:
- buf:字节数组,保存实际数据。为了表示字节数组的结束,Redis 会自动在数组最后加一个“\0”,这就会额外占用 1 个字节的开销。
- len:占 4 个字节,表示 buf 的已用长度。
- alloc:也占个 4 字节,表示 buf 的实际分配长度,一般大于 len。
可以看到,在 SDS 中,buf 保存实际数据,而 len 和 alloc 本身其实是 SDS 结构体的额外开销。
另外,对于 String 类型来说,除了 SDS 的额外开销,还有一个来自于 RedisObject 结构体的开销。
因为 Redis 的数据类型有很多,而且,不同数据类型都有些相同的元数据要记录(比如最后一次访问的时间、被引用的次数等用来帮助执行数据淘汰),所以,Redis 会用一个 RedisObject 结构体来统一记录这些元数据,同时指向实际数据。
一个 RedisObject 包含了 8 字节的元数据和一个 8 字节指针,这个指针再进一步指向具体数据类型的实际数据所在,例如指向 String 类型的 SDS 结构所在的内存地址,可以看一下下面的示意图
为了节省内存空间,Redis 还对 Long 类型整数和 SDS 的内存布局做了专门的设计。
一方面,当保存的是 Long 类型整数时,RedisObject 中的指针就直接赋值为整数数据了,这样就不用额外的指针再指向整数了,节省了指针的空间开销。
️ 注意这里说的整数INT,这可不是说java里的int类型哦,java里的int类型是4字节,但是!这里说的整数是8字节的。下面图示中也是写成INT(可以理解为int编码),但是千万不要以为只有4字节哦!! ️
另一方面,当保存的是字符串数据,并且字符串小于等于 44 字节时,RedisObject 中的元数据、指针和 SDS 是一块连续的内存区域,这样就可以避免内存碎片。这种布局方式也被称为 embstr 编码方式。
当然,当字符串大于 44 字节时,SDS 的数据量就开始变多了,Redis 就不再把 SDS 和 RedisObject 布局在一起了,而是会给 SDS 分配独立的空间,并用指针指向 SDS 结构。这种布局方式被称为 raw 编码模式。
图片帮助理解

边栏推荐
- 基于任务调度的企业级分布式批处理方案
- Configurationmanager pose flash
- Multi engine database management tool DataGrid 2022.1.5 Chinese version
- Go zero micro Service Practice Series (II. Service splitting)
- Mof-53nps loaded antibacterial molecule vancomycin (MOF metal organic framework loaded protein polypeptide drugs)
- 你知道多少,深度解析,值得收藏
- 米尔嵌入式CPU模组亮相工业控制技术研讨会
- crash问题
- 每日一题-1200. 最小绝对差
- GaussDB(DWS) 之数据迁移【这次高斯不是数学家】
猜你喜欢

web开发重点,简单开发web

执行引擎-(编译器、JIT)

計網 | OSI模型中各層單比特

MOS tube from entry to mastery

Thirty two - nodejs simple proxy pool (is it finished?) The SuperAgent uses a timeout that is not a timeout

福建土楼沟文化旅游开发有限公司6%股权转让,来自塔米狗分享

Cyclodextrin metal organic framework loaded low molecular weight heparin and adriamycin (MOF metal organic framework loaded biological macromolecular drugs)

Bidirectional BFS

计网 | OSI模型中各层单位

What are the preparations for building your own website
随机推荐
八大排序方法(难点:堆排序 归并排序 快速排序)
Tencent, Shanghai Jiao Tong and Zhejiang University proposed pyramid clip to align the semantic within the hierarchy and cross hierarchy relationship. The zero shot effect is better than clip
NFT市场进入聚合时代,OKALEIDO成BNB Chain上的首个聚合平台
Learning fuzzy from SQL injection to bypass the latest safe dog WAF
深耕十年,玄武云科技终于稳坐快消SaaS龙头宝座
终于有人把大数定律讲明白了
Harbor正确密码登录不上去
Matlab相关函数知识点(三)-floor函数+点除运算符+矩阵索引规则
Clunky hero v0.96 Chinese version
GaussDB(DWS) 分区自动管理介绍
基于物联网设计的铂电阻气体测温仪(华为云IOT)【玩转华为云】
太神奇的 SQL 查询经历,group by 慢查询优化!
Openkruise v1.2: add persistentpodstate to realize stateful pod topology fixation and IP reuse
米尔嵌入式CPU模组亮相工业控制技术研讨会
GaussDB(DWS) 之数据迁移【这次高斯不是数学家】
[email protected]负载药物环丙沙星
Music creation tool Steinberg Cubase Pro
Quartz多个调度器+线程池模式分别调度任务
Tamidog knowledge - Interpretation of the new regulations on non-public agreement transfer of state-owned property rights in 2022!
论文阅读 (53):Universal Adversarial Perturbations