问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么redis小等于39字节的字符串是embstr编码,大于39是raw编码_百度...

发布网友 发布时间:2022-04-24 02:49

我来回答

1个回答

热心网友 时间:2022-05-03 17:15

作者:刘恒冲
链接:http://www.hu.com/question/25624589/answer/61382148
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个和redis的版本有关系。
查看redis-3.0和最新的版本的object.c文件,可以发现在创建StringObject的时候,会和REIDS_ENCODING_EMBSTR_SIZE_LIMIT比较,这个的默认值是39。
查看一下redis-2.8版本的源码,并没有发现比较,而是直接创建了。
所以我猜测这个embstr编码是3.0以上版本才出现的。

至于为什么是39,这个讲起来就比较复杂了,我就慢点说。
embstr是一块连续的内存区域,由redisObject和sdshdr组成。其中redisObject占16个字节,当buf内的字符串长度是39时,sdshdr的大小为8+39+1=48,那一个字节是'\0'。加起来刚好64。是不是发现了什么?

typedef struct redisObject {
unsigned type:4;
unsigned encoding:4;
unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */
int refcount;
void *ptr;
} robj;

struct sdshdr {
unsigned int len;
unsigned int free;
char buf[];
};

从2.4版本开始,redis开始使用jemalloc内存分配器。这个比glibc的malloc要好不少,还省内存。在这里可以简单理解,jemalloc会分配8,16,32,64等字节的内存。embstr最小为16+8+8+1=33,所以最小分配64字节。当字符数小于39时,都会分配64字节。
这个默认39就是这样来的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
海上钢琴师男主角1900在三等仓里为穷人们弹奏的塔兰泰拉舞曲 <海上钢琴师>那段旋转舞曲是什么地方的曲子 孕妇有痰吃什么化痰 孕妇咳嗽需要注意什么 孕妇能止咳化痰的食物有哪些? 甲数除以乙数等于2余数为5,乙数最小是多少?这时甲数为多少 甲数除以乙数等于116余4问乙数最小是几这时甲数是几? 摩托罗拉手机v3上市时间 v3手机大头手机大头叫什么 如何查看电脑配置硬件型号 | 电脑硬件型号查询方法 vivo智能手机型号大全vivo最新款智能手机v3 STM32开发中,如果想动态分配内存,要想实现标准C中的malloc(),free()函数功能咋办 标准C语言中有malloc、calloc、free函数建立动态链表,Linux有那些函数建立动态链表 如何实现一个新的linux系统调用 教资科目二考试技巧是什么? malloc函数的与new的区别 教资科目二考试时长 malloc之后再进行free,free的内存空间一定被OS回收了吗? 教资科目二要如何备考? C/C++程序员应该如何应对OOM 教资科目二题型有哪些? rt1052中malloc申请是哪里的内存 教资科目二怎么准备 glibc和libc到底有什么区别? 教资科目保留时间问题? malloc怎么用呢 2020教资考试科目都有啥呢? 我下载了glibc的源码,但是没有找到函数malloc的实现,有看过glibc的兄弟帮忙回复一下,多谢 关于教资科目一科目二科目三选择的问题? 怎样获取glibc中malloc函数分配的块大小 语文教资的科目? 既然malloc和calloc都是分配内存,为什么还要区分这两种方式来分配呢? glibc库函数提问 段错误 1633C1,libc_freeres_fn ()由谁调用的 SUSE Linux 11下glibc依赖问题 如何理解堆和堆溢出漏洞的利用 用malloc与free出错,望指导,谢谢 电脑用命名diskpart查询出来的硬盘id是不是硬盘的序列号? 小葱的营养价值和功效 葱有哪些功效? 小葱营养价值 关于相片大小和清晰度 葱的功效与作用及营养价值如何? 小葱有哪些营养价值 小葱头的功效与作用 葱的作用? 葱的药用价值? 野葱的功效与作用有哪些吗 生葱的作用 葱有哪些作用 葱的食用功效 葱对人体有好处吗? 茖葱的功效与作用有哪些