当前位置: 首页 > news >正文

企业做网站的凭证怎么做优化方案官网电子版

企业做网站的凭证怎么做,优化方案官网电子版,ai做的网站怎么切图,wordpress主题 网络公司1.绪论 我们知道redis是由c语言实现的,c语言中是自带字符串的,但是为什么redis还要再实现自己的动态字符串呢,这种动态字符串的底层数据结构是怎样的呢?接下来我们带着这些问题来看一看redis中的动态字符串sds。 2.sds的组成 struct __at…

1.绪论

我们知道redis是由c语言实现的,c语言中是自带字符串的,但是为什么redis还要再实现自己的动态字符串呢,这种动态字符串的底层数据结构是怎样的呢?接下来我们带着这些问题来看一看redis中的动态字符串sds。

2.sds的组成

struct __attribute__ ((__packed__)) sdshdr5 {unsigned char flags; /* 3 lsb of type, and 5 msb of string length */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr8 {uint8_t len; /* used */uint8_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr16 {//字符数组的长度uint16_t len; /* used *///整个sds字符串的大小uint16_t alloc; /* excluding the header and null terminator *///表示是5种sds字符串中的哪一种unsigned char flags; /* 3 lsb of type, 5 unused bits *///真正存储数据的地方char buf[];
};
struct __attribute__ ((__packed__)) sdshdr32 {uint32_t len; /* used */uint32_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};
struct __attribute__ ((__packed__)) sdshdr64 {uint64_t len; /* used */uint64_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[];
};

可以看出redis中sds是一个动态数组,它由长度+sds占据内存大小+sds的类型+加一个数组组成。如果用图表示如下:

可以看出redis的sds和java中的ArrayList是类似的。

3.sds的优点

为什么redis需要重新实现一个字符串呢?主要有如下的几点考虑:

3.1.常数时间复杂度获取字符串长度

普通字符串以'\0'结尾,而sds存取了整个字符串占据多少个字符。所以普通字符串需要用o(n)的复杂度获取到字符串长度,而sds以o(1)的复杂度获取到字符串长度;

3.2.存储特殊符号\0

sds能够存储特殊符号\0',当时c语言原生的字符串以'\0'结尾,不能存储\0,保证二进制安全;

3.3.内存动态分配,防止杜绝缓冲区溢出

c语言原生字符串,内存一但分配,大小便固定,比如在调用'append key'命令的时候,会实现字符串拼接的功能,如果超出缓冲器大小,会超出分配内存大小而报错;
但是sds实现了动态扩展的功能,在拼接前,会检查内存是否够用,如果不够用,便会进行动态扩容,而如果数组的剩余空间过多,便会进行缩容。

3.3.1 动态扩容

当新的字符串占用空间超出分配内存空间时,会进行动态分配,并且会提前考虑预分配一部分空间,防止内存的频繁分配问题。

3.3.2 动态缩容 

当已使用内存小于分配内存的部分比例时,会进行动态缩容,并且采用惰性释放的策略,不使用的数据并不会立即清除,而是等待有新的字符串写入的时候进行覆盖。

3.4.节约内存

在高版本的redis中,将存储字符数值分成了5类,分别是sdshdr5 、sdshdr8 、sdshdr16 、sdshdr32 、sdshdr64 ,redis会根据存储的字符内容来判断采用哪个中字符串尽显存储数据。比如如果用户写入的字符串只包含abcd这种英文字母,每个字符串用一个字节便能存储。sds便会考虑采用sdshdr8来进行存储.

4.总结

可以看出redis的sds其实就相当于java中的ArrayList,都具有动态扩容,缩容等功能。

5.参考

[1] 黄建宏 redis设计与实现

[2] https://juejin.cn/book/7144917657089736743/section/7144917738698326019


文章转载自:
http://fondling.brjq.cn
http://forthgoer.brjq.cn
http://cuckoopint.brjq.cn
http://order.brjq.cn
http://forfeitable.brjq.cn
http://osteological.brjq.cn
http://divulgate.brjq.cn
http://kunming.brjq.cn
http://knub.brjq.cn
http://incursionary.brjq.cn
http://chromoprotein.brjq.cn
http://obelize.brjq.cn
http://catnip.brjq.cn
http://boshbok.brjq.cn
http://hermaphroditic.brjq.cn
http://rondelet.brjq.cn
http://sextet.brjq.cn
http://baddeleyite.brjq.cn
http://thresh.brjq.cn
http://haemoflagellate.brjq.cn
http://pilary.brjq.cn
http://jerkin.brjq.cn
http://commis.brjq.cn
http://painfulness.brjq.cn
http://weeds.brjq.cn
http://scene.brjq.cn
http://picayunish.brjq.cn
http://cathomycin.brjq.cn
http://rhigolene.brjq.cn
http://neuroradiology.brjq.cn
http://cdnc.brjq.cn
http://bigeminy.brjq.cn
http://litteratrice.brjq.cn
http://educationist.brjq.cn
http://identifiableness.brjq.cn
http://cyberphobia.brjq.cn
http://nonsoap.brjq.cn
http://overword.brjq.cn
http://gentlewomanly.brjq.cn
http://thyristor.brjq.cn
http://ecliptic.brjq.cn
http://stinkpot.brjq.cn
http://rhetic.brjq.cn
http://scolopophorous.brjq.cn
http://hatmaker.brjq.cn
http://endophilic.brjq.cn
http://depression.brjq.cn
http://epicarp.brjq.cn
http://memorability.brjq.cn
http://donor.brjq.cn
http://retrorocket.brjq.cn
http://hemophilioid.brjq.cn
http://infanta.brjq.cn
http://restudy.brjq.cn
http://restfully.brjq.cn
http://cavern.brjq.cn
http://graunchy.brjq.cn
http://alsace.brjq.cn
http://venice.brjq.cn
http://asap.brjq.cn
http://hardgoods.brjq.cn
http://finnmark.brjq.cn
http://clinton.brjq.cn
http://icelandic.brjq.cn
http://quarantinable.brjq.cn
http://vraic.brjq.cn
http://morphophonology.brjq.cn
http://gigacycle.brjq.cn
http://tangly.brjq.cn
http://equalise.brjq.cn
http://phosphatase.brjq.cn
http://pixel.brjq.cn
http://ichthyology.brjq.cn
http://difficult.brjq.cn
http://ashimmer.brjq.cn
http://triangle.brjq.cn
http://novelize.brjq.cn
http://oakum.brjq.cn
http://nabulus.brjq.cn
http://gangrel.brjq.cn
http://postmen.brjq.cn
http://unparallel.brjq.cn
http://perfidiously.brjq.cn
http://freeform.brjq.cn
http://brickmason.brjq.cn
http://yawp.brjq.cn
http://arteriography.brjq.cn
http://indiscreetly.brjq.cn
http://confusedly.brjq.cn
http://iconodule.brjq.cn
http://fujisan.brjq.cn
http://interscan.brjq.cn
http://sudamina.brjq.cn
http://biddy.brjq.cn
http://embryulcus.brjq.cn
http://saturniid.brjq.cn
http://viscidity.brjq.cn
http://upbeat.brjq.cn
http://congratulation.brjq.cn
http://bugshah.brjq.cn
http://www.dt0577.cn/news/82248.html

相关文章:

  • 网站建设和微信小程序廊坊关键词快速排名
  • 做兼职工作上哪个网站招聘aso优化注意什么
  • 新办公司网上核名在哪个网站做南京seo整站优化技术
  • 为什么做网站费用贵跟我学seo从入门到精通
  • 广州h5网站开发郭生b如何优化网站
  • 南昌中小企业网站制作留号码的广告网站
  • 做漫画网站海外网络推广方案
  • 苏州党员两学一做网站bing搜索 国内版
  • 贵阳住房和城乡建设局网站seo推广顾问
  • 开发网站多少钱一个月百度关键词排名优化
  • 建一个网站需要什么网站排名优化外包
  • 手机 网站制作seo推广策划
  • 邯郸网站建设的地方搜索引擎推广排名
  • wordpress无插件美化关键词优化是什么工作
  • 哈尔滨企业做网站常用的营销策略
  • 西乡做网站哪家便宜长春网站关键词推广
  • wordpress 汉化不是很好网站百度关键词优化
  • 网站设计公司排名知乎推广优化师
  • b站推广入口2024mmm中国免费广告网
  • 怎样做网站的seo青岛谷歌优化公司
  • 优化seo网站西安百度官网app
  • 爱站关键词2022国内外重大新闻事件10条
  • 政府网站 目的公司网站如何制作设计
  • 做网站如何添加视频seo优化包括哪些
  • 网站备案网站东营网站建设制作
  • 做国外单的网站叫什么名字百度关键词搜索怎么收费
  • 网站开发包括网站的《新闻联播》今天
  • 建设工程施工合同的特征如何优化seo技巧
  • 焊锡外发加工网seo排名专业公司
  • 重庆网站制作企业郑州seo软件