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

上海网站建设不好服务网站推广方案

上海网站建设不好,服务网站推广方案,青海省城乡建设网站,拍卖网站制作Redis对 String 类型实现了很多优化,通过以下三个重要的优化点来解释: 1. 简单动态字符串(SDS) Redis 的 String 类型内部采用简单动态字符串(SDS)来管理字符串。相比于 C 语言的原生字符串,S…

Redis对 String 类型实现了很多优化,通过以下三个重要的优化点来解释:

1. 简单动态字符串(SDS)

Redis 的 String 类型内部采用简单动态字符串(SDS)来管理字符串。相比于 C 语言的原生字符串,SDS 有以下优势:

  • 能够动态地改变自己的长度,避免了不必要的内存分配和拷贝操作;
  • SDS 本身有一个长度属性,可以快速计算字符串的长度;
  • SDS 可以与 C 语言原生字符串互相转换,方便对 C 语言中一些函数的使用。

SDS 源码:

struct sdshdr {int len;                // 字符串实际长度int free;               // 字符串剩余空间char buf[];             // 字符串数据
};

源码解释:redis 源码实现 sds 函数,定义了 SDS 的各种操作函数,例如 sdsnew() 函数用于新建 SDS 字符串,sdsempty() 函数用于初始化一个空 SDS 字符串等。

2. 共享字符串

当多个客户端传入相同的字符串参数时,Redis 会把相同字符串的内部指针指向同一内存地址,这些指针共享同一个字符串对象。这种优化可以减少内存占用,提高性能。

robj *lookupShared(const char *s, size_t len) {dictEntry *de = dictFind(server.shared.dict,s);if (de) {robj *shared = dictGetVal(de);return shared;}robj *shared = createStringObject(s,len);dictAdd(server.shared.dict, s, shared);return shared;
}robj *createShared(const char *ptr, size_t len) {robj *sobj = createObject(OBJ_STRING,sdsnewlen(ptr,len));sobj->encoding = OBJ_ENCODING_RAW; // 设置编码方式为RAWreturn sobj;
}

源码解释:这里有两个相关函数:lookupShared() 用于在 Redis 的共享字符串池中查找指定的字符串,如果字符串存在,则返回字符串对象;如果字符串不存在,则新建字符串对象并存储在共享字符串池中。createShared() 函数则是用于创建新的共享字符串对象。

3. 编码的优化

Redis 的 String 类型支持多种编码方式,如 INT、EMBSTR、RAW 等。根据不同的编码方式和数据类型,Redis 选择最适合的编码方式来储存数据,从而避免了冗余的存储空间。

int encodingType(robj *o) {if (o->encoding == OBJ_ENCODING_INT) {return OBJ_ENCODING_INT;} else if (o->encoding == OBJ_ENCODING_EMBSTR) {return OBJ_ENCODING_EMBSTR;} else {return OBJ_ENCODING_RAW;}
}void setStringObject(robj *o, const char *s, size_t len) {if (o->encoding == OBJ_ENCODING_INT) {// 释放原有的整数值空间decrRefCount(o);// 创建新的Raw编码字符串对象o = createStringObject(s,len);} else if (o->encoding == OBJ_ENCODING_EMBSTR) {// 释放原有的Embstr编码字符串空间sdsfree(o->ptr);o->ptr = zmalloc(len);memcpy(o->ptr, s, len);o->encoding = OBJ_ENCODING_RAW;} else {// 设置Raw编码字符串值o->ptr = sdscpylen(o->ptr, s, len);o->encoding = OBJ_ENCODING_RAW;}
}

源码解释:这里有两个相关函数:encodingType() 用于返回某个值采用的编码方式,可以检查一个字符串对象或列表对象采用的编码方式;另一个函数 setStringObject() 用于设置一个字符串对象的值,根据需要选择适当的编码方式。

4. 总结时刻

回答出来以上三点,表明你对 Redis 的 String 类型的源码是有研究的,而不是每天只顾 CRUD,只顾写业务。

另外,也能表明你的技术深度,面试官一定会对你另眼相看哟!加油!

http://www.dinnco.com/news/24398.html

相关文章:

  • 国内做彩票网站违法么游戏代理平台
  • 商城型企业网站的功能alexa排名
  • 免费企业网站建设免费网络营销具有什么特点
  • 购物网站开发总结报告如何免费做网站网页
  • 做新浪微博网站需要杭州seo整站优化
  • 做网站所用的语言百度热搜词排行榜
  • 品牌网址seo和sem哪个工资高
  • 自己做网站怎么能被访问网站怎么制作教程
  • 公司微网站怎么建设推广一次多少钱
  • 北海网站开发页面优化的方法有哪些
  • 什么网站从做系统电商推广和网络推广的策略
  • 保健品网站制作百度一下官网首页百度一下
  • 扶风网站开发长沙sem培训
  • 合肥网站建设方案朝阳区seo搜索引擎优化怎么样
  • 济南网站建设 力推聚搜网络全网营销推广方式
  • 郑州哪有做网站的公司南宁做网站公司
  • 阿里去可以做几个网站企业网站推广渠道有哪些
  • 百度景安空间网站东莞网络公司排行榜
  • 网站美工做确认取消对话框西安seo经理
  • 做外贸首先要做网站百度推广一般要多少钱
  • kangle搭建wordpress深圳seo优化方案
  • 免费电子商务网站建设搜索引擎推广试题
  • wordpress附加字段镇江seo
  • 南京网站制作希丁哥广东seo教程
  • 专业app网站建设哪家好东莞seo计费管理
  • 南京专业网站制作多少钱seo职位
  • 网站开发学什么编程语言为什么打开网址都是站长工具
  • 竹妃怎么在公众号里做网站网络营销推广专家
  • 南阳市宛城区疫情最新消息郑州seo课程
  • 哈尔滨网站开发公司电话培训计划模板