关注
Q4:
我们都知道Redis对象可以实现一种类型不同底层实现,我们现在来看字符串对象。你可以简单地说一下它的几种底层实现方案?然后讲一下为什么embstr和raw两种实现方案里要以字符串39个字节为界限或者说3版本往后为什么要使用44个字节为界限?
A:
在Redis里,字符串是一个对象,对象是由一个RedisObject结构表示,这个结构中和保存数据有关的三个属性分别是`type`,`encoding`,`ptr`,encoding对应每种类型的不同底层实现方式。
字符串的三种底层实现方案分别对应不同的应用场景,当value的值是数字时,会将指向底层实现的ptr指针变换为long类型,然后将数字直接存放进去,同时将encoding改为int;当value是一个字符串,且大小低于44个字节时(3版本用的是39个字节),采用类似压缩列表的做法,将SDS直接跟在redisObject后面,而不是通过指针指向,同时将编码改为embstr;当这个字符串大于44个字节时(3版本以前用的是39字节),使用SDS实现,并且由指针指向SDS的地址,将编码改为raw。
而使用39个字节作为分类标准的原因是因为计算机分配内存时通常以8为界限,其中8,16,32,64为分配单位,而最开始的RedisObject的头已经占据16个字节,而SDS对象的头又会占据8个字节(两个unsigned int会占据8个字节),因此留给字符串的空间只有40个字节,又因为字符串的最后一个字符默认为`\0`,因此剩下39个字节。而新版本以44为界限的原因是,每个sds都有一个sdshdr,里面的len和free记录了这个sds的长度和空闲空间,但是这样的处理十分粗糙,使用的unsigned int可以表示很大的范围,但是对于很短的sds有很多的空间被浪费了(两个unsigned int 8个字节)。新版本将原来的sdshdr改成了sdshdr8,sdshdr16,sdshdr32,sdshdr64,里面的unsigned int 变成了uint8_t,uint16_t,这样更加优化小sds的内存使用;因此最小的字符串对象头仅仅占用3个字节(len,alloc都是1个字节,还有一个char字符flag占用一个字节),因此节约了5个字节的空间,留出来的就是44个字节。
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
活泼的代码渣渣在泡池...:同学你好,我也是学院本,后天要面这个亚信科技,是实习,请问问题都啥样呀,我项目就做了网上的,这是第一次面试


点赞 评论 收藏
分享
牛客热帖
更多
- 1... BG一般,如何逆天改命拿下后端秋招SSP?1.2W
- 2... 从面试官的角度看待一场面试是怎么样的?1.0W
- 3... 族望留原籍,家贫走四方7898
- 4... 大厂这么卷,去国企,外企“上岸”?6259
- 5... 团、节、东孝子全部启动启动启动!(26届后端秋招总结)5049
- 6... 项目经历混乱?STAR法则手把手教你梳理(附真实案例分析过程)4018
- 7... 待了一年,一点没亏3990
- 8... 应届生们听我一句劝,一个老学长的肺腑之言3558
- 9... 被秋招面试感动了3317
- 10... 作为普通家庭出身的我,为什么非大厂不可?2923
正在热议
更多
# 你现在会用到哪些AI技能? #
2510次浏览 61人参与
# 为什么国企只招应届生 #
206836次浏览 1232人参与
# 智慧芽求职进展汇总 #
1184次浏览 5人参与
# 实习在多还是在精 #
29982次浏览 215人参与
# 你的房租占工资的比例是多少? #
63262次浏览 790人参与
# 秋招踩过的“雷”,希望你别再踩 #
72602次浏览 993人参与
# 未岚大陆求职进展汇总 #
5142次浏览 67人参与
# 小马智行求职进展汇总 #
12917次浏览 49人参与
# 24届的你们现状如何了? #
98249次浏览 509人参与
# 我的求职进度条 #
65047次浏览 949人参与
# 实习下班不想学习,正常吗? #
16924次浏览 164人参与
# HR问:你期望的薪资是多少?如何回答 #
63059次浏览 635人参与
# 你见过哪些工贼行为 #
14606次浏览 84人参与
# 反问环节如何提问 #
114255次浏览 2435人参与
# 如果不考虑收入,你最想做什么工作? #
31959次浏览 184人参与
# 校招谈薪一定要知道的事 #
11504次浏览 107人参与
# 顺丰求职进展汇总 #
62613次浏览 311人参与
# 大厂VS公务员你怎么选 #
19878次浏览 320人参与
# 找工作中的小确幸 #
23347次浏览 231人参与
# 你觉得什么岗位会被AI替代 #
14356次浏览 160人参与
# 牛客租房专区 #
118342次浏览 1334人参与
# 我的租房踩坑经历 #
175645次浏览 1137人参与