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

网站访问统计方案wdcp wordpress 伪静态

网站访问统计方案,wdcp wordpress 伪静态,西安做网站找缑阳建,长春 餐饮 网站建设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.laogonggong.com/news/98233.html

相关文章:

  • 色彩搭配 网站手机qq浏览器网页搜索记录删不掉
  • 贵阳公司网站建设网站建设能给客户带来什么
  • 西安网站制作模板网站后台管理系统一般用户名是什么
  • 网站建设空间一般多大合肥婚恋网站建设
  • 做关于时尚网站的目的石家庄网站建设公司黄页
  • 展示类网站建设WordPress 公海池
  • 网站建设效益天元建设集团有限公司 电话
  • 做网站用小动画网站备案法律法规
  • 做淘宝可以在别的网站发信息吗wordpress建站事例
  • 常州网站建设代理商建站方案书
  • 甘肃企业网站建设网站建设开发计划模板
  • 外部网站可以做链接到淘宝吗舞钢网站建设
  • 快速建站公司有哪些免费建设自己的网站
  • 四平网站建设怎么选从哪个网站设置宽带主机
  • 淮北网站建设设计网站数据库是谁提供
  • 做食品网站有哪些蚌埠网站关键词优化
  • 济阳网站建设虚拟主机怎么弄网站
  • 电子商务网站建设.pdf科技资讯网站开发
  • 软件下载网站建设白银市住房和城乡建设局网站
  • 电影网站开发api如何将网站提交给百度
  • 木渎建设局网站固安县住房和城乡建设局网站
  • 企业网站建设的目的有()做美容行业的网站哪个好
  • 外贸网站建设服务器网站设计集团
  • 嘉峪关网站建设织梦 网站栏目管理 很慢
  • 榆林市行政效能建设网站wordpress开发单页面
  • 如何快速做网站wordpress滑块不显示
  • 只做网站应该找谁无锡设计网站建设
  • 网站栏目怎么做301定向网站建设流程和费用
  • 中山企业网站软件编程专业
  • php做网站有哪些优点天津平台网站建设哪家好