| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Redis核心技术-数据结构3-String -> 正文阅读 |
|
[数据结构与算法]Redis核心技术-数据结构3-String |
String类型底层结构??使用的底层结构为简单动态字符串(Simple Dynamic String SDS)。
??简单动态字符串内存长度: ??len:记录buf已使用的长度,len长度为4byte; ??String类型除了SDS内存使用外,还有RedisObject结构体。 ??RedisObject结构体使用8byte存储元数据,使用8byte存储数据指针,数据指针指向具体数据所在位置。 ??Redis针对不同的数据类型,做了一些优化: 2.如果是字符串类型,并且长度小于或等于44byte时,RedisObject中的元数据、ptr、SDS为一块连续内存,目的为了避免内存碎片,这种内存布局方式称为embstr编码方式; 3.如果字符串类型大于44byte,ptr指向SDS内存空间,这种内存布局方式称为raw编码方式。 ??int编码、embstr编码、raw编码方式结构如下: ??Redis使用jemalloc库分配内存,jemalloc分配内存时,根据申请内存字节数N,计算比N大的字节数S,S取值最接近2的次方数。 ??例如N=24,S取值2的5次方=32。类似JVM中的内存大小分配。 ??由此可以计算出一个key和value最少需要多大内存? RedisObject介绍
??RedisObject 的内部组成包括了 type,、encoding,、lru 和 refcount 4 个元数据,以及 1 个*ptr指针。 ??参数说明: refcount:用于共享计数,类似于jvm的引用计数垃圾回收算法,当refcount为0时,表示没有其它对象引用,可以进行释放此对象。 ptr 指针:ptr 指针是指向对象的底层实现数据结构。 ??查看key type:
??查看key encoding:
参考: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:28:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |