首页 > 其他分享 >String数据类型

String数据类型

时间:2023-03-25 16:24:22浏览次数:48  
标签:字节 SDS 数据类型 保存 编码方式 buf String

当保存 64 位有符号整数时,String 类型会把它保存为一个 8 字节的 Long 类型整数,这种保存方式通常也叫作 int 编码方式。 当保存的数据中包含字符时,String 类型就会用简单动态字符串(Simple Dynamic String,SDS)结构体来保存,如下图所示:

  • buf:字节数组,保存实际数据。为了表示字节数组的结束,Redis 会自动在数组最后加一个“\0”,这就会额外占用 1 个字节的开销。
  • len:占 4 个字节,表示 buf 的已用长度。
  • alloc:也占个 4 字节,表示 buf 的实际分配长度,一般大于 len。
可以看到,在 SDS 中,buf 保存实际数据,而 len 和 alloc 本身其实是 SDS 结构体的额外开销。  加上redis自身的redisObject 结构体设计,示意图如下: 为了节省内存空间,Redis 对 Long 类型整数和 SDS 的内存布局做了专门的设计。
  • 当保存的是 Long 类型整数时,RedisObject 中的指针就直接赋值为整数数据了,这样就不用额外的指针再指向整数了,节省了指针的空间开销。这种布局方式被称为 int 编码方式。
  • 当保存的是字符串数据,并且字符串小于等于 44 字节时,RedisObject 中的元数据、指针和 SDS 是一块连续的内存区域,这样就可以避免内存碎片。这种布局方式也被称为 embstr 编码方式。
  • 当字符串大于 44 字节时,SDS 的数据量就开始变多了,Redis 就不再把 SDS 和 RedisObject 布局在一起了,而是会给 SDS 分配独立的空间,并用指针指向 SDS 结构。这种布局方式被称为 raw 编码方式。

 

 

 

 

标签:字节,SDS,数据类型,保存,编码方式,buf,String
From: https://www.cnblogs.com/zhengbiyu/p/17254956.html

相关文章

  • bzoj 2555 SubString
    2555:SubStringTimeLimit: 30Sec  MemoryLimit: 512MBSubmit: 2611  Solved: 784[Submit][Status][Discuss]Description      懒得写背景......
  • MFC-CStringArray
            ......
  • Qt5.12实战之QList与QStringList使用
    元素个数小于1000的QList类对象能实现链表中的快速插入与查找操作前端插入prepend(),后端插入append()QList是一种链表模板,是Qt的一种泛型容器类QList成员函数基于索引实现......
  • Object.toString与Object.prototype.toString区别
    1、Object原型链上的toString方法可以用于对象类型的判断,如常用的区分数组与普通对象。例如:Object.prototype.toString.call('');//[object......
  • CF EC Round 145 D. Binary String Sorting
    D题意给一个01串,交换两个数需要花费\(10^{12}\),删除某个数需要花费\(10^{12}+1\),问最少花费多少使得串单调不降思路线性dp,\(f[i][0]\)表示前i位构建的串结尾为0,单调......
  • 开心档之Go 语言数据类型
    在Go编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存......
  • java-Object的通用方法:equals()、hashCode()、toString()、clone()
    1/**2*Object通用方法:equals()、hashCode()、toString()、clone()3*/4@Data5@NoArgsConstructor6@AllArgsConstructor7publicclassobje......
  • python的数据类型的转换
    1num=input('请输入一个小数:')#返回的是字符串类型的数据2print(num,type(num))3print(int(num),type(int(num)))4print(num,type(num))5print(int(float(......
  • Redis 字符串(String)
    Redis字符串(String)Redis字符串数据类型的相关命令用于管理redis字符串值,基本语法如下:语法>COMMANDKEY_NAME实例>setnameasaOK>getnameasa字符串命......
  • 科学计数法表示的数字类型转换为非科学计数法String
    科学计数法表示的数字类型转换为非科学计数法String步骤//1.科学计数法表示的数字类型doublenum=1.23456E+16;//2.转换为BigDecimalBigDecimalbigDecimal=j......