redis自学(8)String

StringRedis中最常见的数据存储类型:

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

RedisObject的头和SDS是两个独立的内存空间

 

 

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

 

 

为什么是44个字节,因为44个字节加上SDS的头信息(3个字节),和结束标识“/0”(1个字节),再加上RedisObject16字节,正好是64字节。这是因为redis的底层内存分配算法是Jemalloc,这种算法在分配内存的时候,会以2N次方做内存分配,64恰好是一个分片大小,因此不会产生内存碎片。所以,使用String类型的时候,尽可能不要超过44个字节。

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

数字可以直接转换成二进制位,一个字节可以表示字符串255,用比特位存储数字更节省内存空间。

 

 

posted @ 2024-02-29 17:08  蓝海的bug本  阅读(13)  评论(0编辑  收藏  举报