贝博炸金花博彩平台用户体验评价_Redis八股文精讲:字符串

发布日期:2023-10-30 06:39    点击次数:83

贝博炸金花博彩平台用户体验评价_Redis八股文精讲:字符串

贝博炸金花博彩平台用户体验评价_[[431323]] 写在前边

小牛之前出了八股文背诵版系列,不少一又友问我,能不成搞个八股文精讲,把口试问题讲讲透,于是系列就这样出身了。我们第一期先聊聊Redis。

字符串

Redis底层是C讲话已毕的。于是不少一又友想虽然的认为,Redis的字符串和C讲话字符串已毕相貌一致。

但事实上,Redis我方界说了一套字符串的已毕,名曰SDS(simple dynamic string)。

不少同学在口试时,口试官轻描淡学来一句,来讲一讲Redis的SDS吧。人人一脸懵逼,半天答不上来。临了搞半天,其实口试官即是问的Redis字符串呀。

最初复兴一个问题:为什么Redis不聘请C讲话的字符串平直作念具体已毕?

这虽然是因为这种数据结构有固有颓势啦。主要有如下几个

弱点1:O(n)复杂度获取长度

我们知谈,C讲话如何判断一个字符串仍是贬抑,虽然是通过记号位'\0'。

C讲话Str

是以,关于我们想获取字符串长度,我们需要重新启动遍历,直至遍历到\0,时代复杂度造成了O(n)。

弱点2:莫得较好的扩容机制

关于C讲话,想要搞个字符串数组,笃信需要事前笃信好字符串长度。淌若这个字符串时时需要修改,修改前后长度一致还好说,淌若不一致,那要领层面就需要再行肯求一段新内存,并把字符一个个拷贝到新的场地。

皇冠博彩开户 弱点3:荒芜字符无法处理

援用《Redis源码理会与实战》的例子 淌若我们想存储字符串"redis\0"

皇冠博彩官方
char 澳门骰宝*a = "redis\0"; 

到原始C讲话,它编译器看到\0,认为照旧字符贬抑的记号呢,淌若把它打印下来,它只打出redis。是以格外是关于二进制数据,这种奇奇怪怪的case格外多,因此C讲话的字符数组就处理不了这块存储二进制字符的需求了。

为了搞定C讲话字符数组的不及,redis建议了新的门径。我们先来望望3.0及之前版块的已毕。

博彩平台用户体验评价
struct sdshdr {     unsigned int len;     unsigned int free;     char buf[]; } 

来讲授一下这些字段吧。

欧博在线平台

len:数组字符串已使用长度

贝博炸金花一位名叫XXX体操选手最近曝光参加一场私人赌局,并因此受到处罚。这位选手曾国家队一员,欧博真人平台由于行为不当,被迫退出队伍。不过,并就此放弃,而是通过努力坚持,重新获得一线赛事资格,成为备受瞩目新星。

free: 数组未使用的字符串长度

球迷文化

buf:存储字符串

在之后的版块,Redis对SDS进行了翻新,但大体念念想不变

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

来讲授一下这些字段吧。

len:数组字符串已使用长度

皇冠hg86a

alloc: 数组分拨的长度

flags: 示意SDS类型

buf:存储字符串

关于SDS类型,我也稍稍多啰嗦两句。在新版块redis中,有4种SDS类型(sdshrd5 never used)。其中 sdshrd8 sdshrd16 sdshrd32 sdshrd64 的区分只是就在len和alloc上有所区分。

关于sdshrd8 该界说为

皇冠有usb接口吗
struct sdshdr8 {     uint8_t len;     uint8_t alloc;     unsigned char flags;     char buf[]; } 

依此类推,sdshrd16即是

皇冠客服飞机:@seo3687
struct sdshdr16 {     uint16_t len;     uint16_t alloc;     unsigned char flags;     char buf[]; } 

那为啥新版Redis搞这样多结构体?一个结构体不是一法通万法就够了嘛。

虽然,事实如实如斯,按已毕角度看。淌若只聘请sdshrd64,笃信也够了。

但按悭吝角度看呢?淌若我们机子很菜,内存很小,想抠抠索索能省小数,是小数,这样作念就有公道辣。

公道在那处?虽然是uint8_t、uint16_t、uint32_t、uint64_t占的空间不相似,关于小字符串,用小头sdshdr8,这样len 和alloc占用字段也能省小数,即是这样回事。

皇冠博彩

是以不错看到,SDS本体上是C讲话的字符数组,加上了小数别的符号属性的结构体辛勤。小伙伴们下次遇见口试官问SDS,就不必慌啦!

临了多啰嗦两句SDS扩容:

关于字符串增多了,淌若原始的剩余空间实足,平直复返 淌若空间不及够,再行肯求两倍最小需要长度的空间,再进行挨个赋值。

临了归来一下:Redis建议动态字符串这一数据结构,翻新了C讲话字符数组的不及。该动态字符串有如下公道:

字符串长度获取时代复杂度从O(n)->O(1) 减少字符串扩容引起的数据搬运次数。 不错存储愈加复杂的二进制数据

参考

《Redis源码理会与实战》

https://blog.csdn.net/weixin_39744512/article/details/111170924

https://blog.csdn.net/wolf2s/article/details/107945242 

《Redis的规划与已毕》

 



栏目分类



Powered by 欧博体育注册 @2013-2022 RSS地图

皇冠体育导航皇冠体育皇冠现金网皇冠客服新2网址