redis设计与实现(一).docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? ? redis设计与实现(一) ? ? 一:redis的数据库 ? 服务器中的数据库 ? ? ? 1.int dbnum:决定了服务器数据库的数量,这个数量在初始化服务器的时候决定。默认情况这个值为16。 ? 切换数据库 ? ? ? 1.redis的客户端都有自己的目标数据库,每当客户端执行数据库的命令时,目标数据库便是这个命令的操作对象,默认情况下客户端目标数据库是0号数据库。但是可以通过 select db 来切换数据库。 客户端redisClient的结构中db属性保存了客户端当前的目标数据库。这个指针指向了redisServer.db数组中的一个元素,即目标数据库。 ? ? 数据库键空间 ? ? ?1.每个数据库都是由一个redis.h/redisDb结构表示。redisDb结构的dict字典保存了数据库中的所有键值对称为键空间。 ? ? ? ? ?键空间的键是数据库的键,每个键值都是一个字符串对象。 ? ? ? ? ?键空间的值就是数据库的值,每个值都可以是字符串对象,列表对象,集合对象,有序集合对象,散列对象。结构如下 ? ? ?2.读写键空间的维护操作:服务器不仅仅是对键空间的读写进行操作,还会进行一些额外的维护操作 ? ? ? (1)在读取一个键之后,服务器会根据键值的是否存在来更新服务器键空间的命中和不命中的次数。这个值可以通过keyspace_hits属性和keyspace_misses属性查看。 ? ? ?(2) 在读取一个键后,服务会更新这个键的LRU(最近一次访问时间),这个值可以计算键的空闲时间 ? ? ?(3)服务在读取一个键时,发现这个键已经过期,会先删除这个键值,再继续其他操作。? ? 设置键的生存时间或者过期时间? ? ? (1) 命令:expire? key time:将键key的生存时间设置为time秒 ? ? ? ? ? ? ? ? ? ? pexpire??key time:将键key的生存时间设置为time毫秒 ? ? ? ? ? ? ? ? ? ?expireat key timestamp 将键key的过期时间设置为timestamp所指定的秒数时间戳。 ? ? ? ? ? ? ? ? ? ?pexpireat key timestamp 将键key的过期时间设置为timestamp所指定的毫秒数时间戳。 ? ? ? ? ? ? ? ? ?但是前三个命令的本质转换为最后的pexpireat命令来实现的。 ? (2)保存过期时间 ? ? ? ? ? ?redisDb结构expires字典保存了数据库中所有键的过期时间,便成为过期字典。 ? ? ? ? ? ? ? ? 键:过期字典的键是一个指针,指向键空间的键对象。这样子的存储键空间和过期字典的键都是指向同一个对象,不会造成内存浪费。 ? ? ? ? ? ? ? ? 值:过期字典的值是long类型的整数,存储的是这个键的过期时间(UNIX的毫秒精度的时间戳) ? ? ? ? ? ? ? ? ? ? ? ? (3)判定过期键 ? ? ? ? ? ? ?1.检查过期字典是否存在指定的键,如果存在,那么取得键的过期时间 ? ? ? ? ? ? ?2.检查当前UNIX时间是否大于键的过期时间,如果是,则键已经过期了。否则,键值未过期。 ? ?过期键删除策略: ? ? ? (1)策略 ? ? ? ? ? ? 1.定时删除:在设置见得过期时间的同时,创建一个定时器,让定时器在键的过期时间来临是立即执行对键的删除操作。 ? ? ? ? ? ? ? ? ?缺点:当过期键过多时,定期删除会占用一部分的CPU时间。会影响服务器正常操作的影响时间和吞吐量。 ? ? ? ? ? ? 2.惰性删除:从键空间获取键时,先检查键值是否过期,如果过期的话,就删除该键。没有过期,就返回该键。 ? ? ? ? ? ? ? ? 惰性删除对CPU的时间是最友好的,但是大量的过期键未删除,未造成内存的浪费。 ? ? ? ? ? ? 3.定期删除:每隔一段时间,程序对数据库进行一次检查,删除里面的过期键。 ? ? ? ? ? ? ? ? 缺点:执行太频繁或者时间太长,会退化为定删除。执行时间太少会造成内存的浪费。 ? ? (2)redis的删除策略:采用2、3两种方式结合的方式来删除过期策略。 ? ? ? ? ? ? 惰性删除:从键空间获取键时,先检查键值是否过期,如果过期的话,就删除该键。没有过期,就返回该键。 ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? 定期删除策略: ? ? ? ? ? ? ?? ? ?? 二、RDB持久化 ? RDB持久化:是将redis的内存数据,保存在磁盘中,避免数据意外丢失。 ?RDB文件的创建与载

文档评论(0)

科技之佳文库 + 关注
官方认证
内容提供者

科技赋能未来,创新改变生活!

版权声明书
用户编号:8131073104000017
认证主体重庆有云时代科技有限公司
IP属地浙江
统一社会信用代码/组织机构代码
9150010832176858X3

1亿VIP精品文档

相关文档