redis自学(8)String
String是Redis中最常见的数据存储类型:
- 其基本编码方式是RAW,基于简单动态字符串(SDS)实现,存储上限为512mb。
RedisObject的头和SDS是两个独立的内存空间
- 如果存储的SDS长度小于44字节,则会采用EMBSTR编码,此时object head与SDS是一段连续空间。申请内存是只需要调用一次内存分配函数,效率更高。
为什么是44个字节,因为44个字节加上SDS的头信息(3个字节),和结束标识“/0”(1个字节),再加上RedisObject的16字节,正好是64字节。这是因为redis的底层内存分配算法是Jemalloc,这种算法在分配内存的时候,会以2的N次方做内存分配,64恰好是一个分片大小,因此不会产生内存碎片。所以,使用String类型的时候,尽可能不要超过44个字节。
- 如果存储的字符串是整数值,并且大小在LONG_MAX范围内,则会采用INT编码:直接将数据保存在RedisObject的ptr指针位置(刚好8字节),不再需要SDS了。
数字可以直接转换成二进制位,一个字节可以表示字符串255,用比特位存储数字更节省内存空间。