- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?
?
Redis设计与实现
第一部分 数据结构与对象 第8章 对象
?
?
Reids并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象至少一种数据结构。Redis根据对象的类型来判断对象是否可以执行给定的命令。使用对象可以针对不同的场景为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。Redis的对象系统还实现了基于引用计数的内存回收机制,当程序不再使用某个对象的时候,这个对象所占用的内存就会被自动释放,另外redis还通过引用计数技术实现了对象共享机制。另外对象还带有访问时间记录信息,该信息在服务器启用了maxmemory功能的情况系啊,空转时长较大的那些键可能会优化被服务器删除。
对象的类型与编码Redis使用对象来表示数据库中的键和值,每次当我们在redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的键(键对象),另一个对象用作键值对的值(值对象)。Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个属性分别是type属性,encoding属性和ptr属性:typedef struct redisObject {//类型unsigned type:4;//编码unsigned encoding:4;//指向底层实现的数据结构的指针void *prt;// …} robj;
类型键的类型总是一个字符串对象值的类型可以表8-1列出的常量的其中一个。
TYPE命令返回的也是值对象的类型,而不是键对象的类型。
编码和底层实现对象的ptr指针指向对象的底层实现数据结构,而这些数据结构由对象的encoding属性决定。encoding属性记录了对象所使用的编码,也即是说这个对象使用了什么数据结构作为对象的底层实现,这个属性的值可以是表8-3列出的常量中的一个。
每种类型的对象都至少使用了两种不同的编码来实现,表8-4列出了每种类型的对象可以使用的编码。
通过encoding属性来设定对象所使用的编码,而不是为特定类型的对象关联一种固定的编码,极大地提升了Redis的灵活性和效率,因为Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一个场景下的效率。
举个例子,列表对象包含的元素比较少时,Redis使用压缩列表作为对象的底层实现:1.因为压缩列表比双端链表节约内存,并且在元素数量较少时,在内存中以连续块的方式保存的压缩列表比起双端链表可以更快载入内存2.随着列表对象包含的元素越来越多,使用压缩列表来保存元素的优势逐渐消失时,对象就会将底层实现从压缩列表转向功能更强、也更适合保存大量元素的双端链表上面。
字符串对象值 编码可以用long类型保存的整数 int可以用long double类型保存的浮点数 embstr或raw字符串值,或者因为长度太大而没办法用long类型表示的整数,又或者因为长度太大而没办法用long double类型表示的浮点数 embstr或者raw字符串值,并且长度大于32字节 raw字符串值,长度小于等于32字节 embstr
embstr编码是专门用于保存短字符串的一种优化编码方式,这种编码和raw编码一样,都使用redisObject结构和sdshdr结构来表示字符串对象,但使用embstr编码的字符串对象来保存短字符串有以下好处:1.embstr编码将创建字符串对象所需的内存分配次数从raw的两次降低到一次。2.释放embstr编码的字符串对象只需要调用一次内存释放函数,而raw需要两次3.因为embstr编码的字符串对象的所有数据结构都保存在一块连续的内存里面,所以这种编码的字符串对象比起raw编码的字符串对象能够更好的利用缓存带来的优势。
编码的转换int编码和embstr编码的字符串对象在条件满足的情况下,会被转换为raw编码的字符串对象。embstr编码是只读的,int编码和raw可以修改,所以embstr在修改命令执行之后就变成了一个raw编码的字符串对象。
字符串命令的实现
列表对象列表对象的编码可以是ziplist或者linkedlist。
编码转换当列表对象可以同时满足以下两个条件时,列表对象使用ziplist编码:1.列表对象保存的所有字符串元素的长度都小于64字节,2.列表对象保存的元素数量小于512个其它使用linkedlist编码
注意以上两个条件的上限值是可以修改的,具体请看配置文件中关于list-max-ziplist-value选项和list
您可能关注的文档
- Python语言程序设计-学习笔记和练习.docx
- Python语言程序设计-学习笔记和课后练习.docx
- Python语言程序设计-文件和数据格式化.docx
- Python语言程序设计基础.docx
- Python课程设计爬虫篇.docx
- QT学习1:设计可视化窗口的框架-Ui-Class.docx
- RBAC权限系统分析、设计与实现.docx
- Redis+Nginx+JVM+设计模式+Spring全家桶+Dubbo.docx
- Redis+Nginx+设计模式+Spring全家桶+Dubbo精选.docx
- Redis+Nginx+设计模式+Spring全家桶+Dubbo精选概述.docx
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
最近下载
- 2024年高考地理新课标卷试题答案解析及备考指导课件.pdf
- 铸牢中华民族共同体意识-考试复习题库(含答案).docx VIP
- 2024年党纪学习教育ppt(党课).pptx VIP
- 至为芯科技多串锂电池充放电芯片IP5389 datasheet_cn_v1.02(1)(2).pdf
- 2024年四川凉山昭觉县事业单位招聘60人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- 全国托育大赛中职组(教师)备赛复习试题附答案.doc
- 金匮要略的基础知识点总结(考试必备).doc VIP
- 爱在日落黄昏时Before.Sunset.2004中英表格台词剧本.pdf
- PADI开放水域潜水员理论考试A卷.docx
- 项目经理考核细则.docx
文档评论(0)