网站大量收购独家精品文档,联系QQ:2885784924

7.3-键值对数据库-2.pptx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.3 键值对数据库 Redis数据库结构Redis数据库的实现原理【本节学习目标】 一、Redis的数据库结构存储效率(memory) Redis内部维护一个db数组,每个db都是一个数据库,默认16个数据库。用select命令来切换数据库。(efficiency)的考虑,压缩数据、减少内存碎片等问题; 快速响应时间(fast response time)与高吞吐量(high throughput)的折中方案; 单线程(single-threaded): 简化数据结构和算法的实现,通过异步IO和pipelining等机制来实现高速的并发访问 1. 数据库数组服务器中的数据库,redis.h/redisServer结构的db数组中,每个redisDb结构就代表一个数据库。struct redisServer{ ... // 一个保存着redisDb的数组,db中的每一项就是一个数据库 redisDb *db; ...} 每个数据库由一个redisDb结构表示,其中redisDb结构中的字典dict保存了数据库中所有的键值对。 redisDB结构体的定义:typedef struct redisDb{ ... //保存数据库中所有的键值对 dict *dict; ...}Redis中的字典dict, 又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构; 字典中的每个键是独一无二的 2. 字典结构每个数据库由一个redisDb结构表示,其中redisDb结构中的字典dict保存了数据库中所有的键值对。 redisDB结构体的定义:typedef struct redisDb{ ... //保存数据库中所有的键值对 dict *dict; ...}Redis中的字典dict, 又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构; 字典中的每个键是独一无二的。typedef struct dict { dictht ht[2]; int rehashidx; int iterators; } dict; typedef struct dicht { dicEntry ** table; unsigned long size; unsigned long sizemark; unsigned long used;} dictht;typedef struct dicEntry { void *key; // 键 union { void *val; uint64_tu64; int64_ts64; } v; struct dicEntry *next; } dictEntry; 字典结构图示字典层次结构 3 Rehash过程过程:创建一个新的哈希表,大小是当前的两倍(准确说还必须是2的幂次),然后把全部键值对重新散列到新的哈希表中,最后再用它替换原来的哈希表;rehash问题:具体过程如下:1). 在ht[1]上分配一个更大的哈希表;2). “分多次”把ht[0]上的键值对重新散列到ht[1]上;3). 当处理完所有键值对时,让ht[0]指向新的哈希表; 4. 对象结构redisObject对象来表示所有的key和value。 对象结构特点对象的编码对象空转时长, 空转时长较高的那部分键会优先被Redis释放,从而回收内存。?内存回收: 当一个对象的引用计数为0时,释放该对象内存资源。?对象共享: 对象的应用计数另外一个功能就是对象的共享,当一个对象被另外一个地方使用时,可以直接在该对象引用计数上++就行。注意:Redis只对包含整数值的字符串对象进行共享 二、Redis键值数据库的实现原理-原则数据库的操作、集群的设置简单, Redis内部维护一个db数组,每个db都是一个数据库,默认16个数据库。用select命令来切换数据库。存储效率(memory efficiency)的考虑,可压缩数据、减少内存碎片、高速缓存和外存的数据交换算法等问题;快速响应时间(fast response time)与高吞吐量(high throughput)的折中方案;单线程(single-threaded): 简化数据结构和算法的实现,通过异步IO和pipelining等机制来实现高速的并发访问。 1. 键空间管理通过字典保存了数据库中的所有键值对,字典称为键空间。键空间的每个键都是一个字符串对

文档评论(0)

jy6112jyh + 关注
实名认证
内容提供者

文库文档

1亿VIP精品文档

相关文档