Redis-动态字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis-动态字符串相关的知识,希望对你有一定的参考价值。

参考技术A

注意 : 当字符串长度为不小于44时,该类型为raw类型

其中:

SDS结构体的大小

SDS的大小是 : 1+1+1+?,所以一个SDS的大小最小是3个字节.所以存在redis中一个字符串数据大小,最小16+3个字节,19个字节.

而内存分配器等分内存的大小的单位是2的幂次:2/4/8/16/32/64.为了能容纳一个完成的字符串,那么最少分配32个字节空间.如果字符串稍微大一点就是64个字节空间.如果总体超出了 64 字节,Redis 认为它是一个大字符串,不再使用 emdstr 形式存储,而该用 raw 形式。

为什么redis会在超过64个字节时当做raw处理呢.或者说为什么字符串长度为44时,就变为了raw呢?

首先,raw是指redis动态字符串,是radis对c语言原生字符串的一种包装.而原生c语言的字符串,最后一个始终使用\\0的字符串结尾,是为了方便使用glibc的字符串函数处理,及便于打印输出.而 64-19(所有头占用的)=45 个字符串.字符串又是以\\0结尾,所以embstr 最大能容纳的字符串长度就是 44.

以上是关于Redis-动态字符串的主要内容,如果未能解决你的问题,请参考以下文章

redis 简单动态字符串 SDS

redis_简单动态字符串

Redis数据结构之简单动态字符串SDS

redis专题十七:再聊一聊redis的简单动态字符串

图解Redis之数据结构篇——简单动态字符串SDS

Redis简单动态字符串SDS