原创

redis数据结构-五种数据类型-string


String是Redis中最常见的数据存储类型

  1. 其基本编码方式是RAW,基于简单动态字符串(SDS)实现,存储上限为512mb。

微信截图_20230207235526

  1. 如果存储的SDS长度小于44字节,则会采用EMBSTR编码,此时object head与SDS是一段连续空间。申请内存时只需要调用一次内存分配函数,效率更高。(如下图)

微信截图_20230208000639

微信截图_20230208000150

从上图可以看出SDS的字节数为44字节+头部3字节+尾部1字节总共48字节,当加上redisObject的16字节一共为64字节

redis底层采用的算法jmlock,这种算法会以2的n次方去做内存分配,而64恰好是一个分片大小因此不会产生内存碎片,这就是SDS以44字节为限制的原因。

使用String类型时尽可能不要超过44字节,因为一旦超过了就会转为RAW编码

  1. 如果存储的字符串是整数值,并且大小在LONGMAX范围内,则会采用INT编码: 直接将数据保存在RedisObject的ptr指针位置(刚好8字节),不再需要SDS了。

微信截图_20230208001739

所以可以将上面总结为以下三种情况

微信截图_20230208001829

redis原理
数据结构
  • 作者:陌攻(联系作者)
  • 发表时间:2023-02-08 03:08
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论