- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?
?
Redis设计与实现
第二部分 单机数据库的实现 第9章 数据库
?
?
服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。struct redisServer {//一个数组,保存着服务器中的所有数据库redisDb *db;//服务器的数据库数量 dbnum属性的值由服务器配置的database选项决定,默认情况下,该选项的值为16 int dbnum;}
切换数据库每个redisClient都有自己的目标数据库,每当客户端执行数据库写命令或者数据库读命令的时候,目标数据库就会成为这些命令的操作对象。默认情况下,Redis客户端的目标数据库为0号数据库,但客户端可以通过执行SELECT命令来切换目标数据库。在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是一个指向redisDb结构的指针:typedef struct redisClient {//记录客户端当前正在使用的数据库 指向redisServer.db数组中的一个元素(目标数据库)//select命令的原理就是让redisClient.db指针指向服务器中不同的数据库,从而实现切换数据库redisDb *db;} redisClient;
在redis执行flushdb这样的危险命令之前,最好先执行一个select命令,显示的切换到指定的数据库,然后再执行别的命令。
数据库键空间Redis是一个键值对(key-value pair)数据库服务器,服务器中的每个数据库都由一个redis.h/redisDb结构表示,其中,redisDb结构的dict字典保存了数据库?的所有键值对,我们将这个字典称为键空间(key space).typedef struct redisDb {//数据库键空间,保存数据库中的所有键值对dict *dict;} redisDb;键空间和用户所见的数据库是直接对应的:1.键空间的键也就是数据库的键,每个键都是一个字符串对象2.键空间的值也就是数据库的值,每个值都可以是字符串对象、列表对象、哈希表对象、集合对象和有序集合对象中的任意一种Redis对象。
读写键空间时的维护操作当使用redis命令对数据进行读写时,服务器不仅会对键空间执行指定的读写操作,还会执行一些额外的维护操作,其中包括:1.在读取一个键之后(读和写都会对键进行读取),服务器会根据键是否存在来更新服务器键空间命中(hit)次数或键空间不命中(miss)次数,这两个值可以在INFO stats命令的keyspace_hits属性和keyspace_missess属性中查看。2.在读取一个键之后,服务器会更新键的LRU(最后一次使用)时间,这个值可以用于计算键的空闲时间,使用OBJECT idletime命令可以查看键key的闲置时间。3.如果服务器在读取一个键时发现该键已经过期,那么服务器会先删除这个过期键,然后才执行余下的其他操作,本章稍后对过期键的讨论会详细说明这一点。4.如果客户端使用watch命令监视了某个键,那么服务器修改这个键,会将这个键标记为脏(dirty),从而让事物程序注意到这个键已经被修改过。5.服务器修改一个键之后,都会对脏(dirty)键计数器的值增1,这个计数器会触发服务器的持久化以及复制操作。6.如果服务器开启了数据库通知功能,那么在对键进行修改之后,服务器将按配置发送相应的数据库通知。
设置键的生存时间或过期时间通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键。注意:SETEX命令可以在设置一个字符串键的同时为键设置过期时间,因为这个命令是一个类型限定的命令(只能用于字符串键),所以本章不会对这个命令进行介绍,但SETEX命令设置过期时间的原理和本章介绍的EXPIRE命令设置过期时间的原理是完全一样的。与EXPIRE命令和PEXPIRE命令类似,客户端可以通过EXPIREAT命令或PEXPIREAT命令,以秒或者毫秒精度给数据库中的某个键设置过期时间(expire time,unix时间戳,当过期时间来临时,服务器就会自动从数据库删除这个键).TTL命令和PTTL命令接受一个带有生存时间后者过期时间的键,返回这个键的剩余生存时间,也就是,返回这个键被服务器自动删除还有多长时间。
设置过期时间Re
您可能关注的文档
- 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
- redis-list类型的设计与实现.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
文档评论(0)