7.3-键值对数据库-2_第1页
7.3-键值对数据库-2_第2页
7.3-键值对数据库-2_第3页
7.3-键值对数据库-2_第4页
7.3-键值对数据库-2_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7.3 键值对数据库Redis数据库结构Redis数据库的实现原理【本节学习目标】一、Redis的数据库结构存储效率(memory) Redis内部维护一个db数组,每个db都是一个数据库,默认16个数据库。用select命令来切换数据库。(efficiency)的考虑,压缩数据、减少内存碎片等问题; 快速响应时间(fast response time)与高吞吐量(high throughput)的折中方案; 单线程(single-threaded): 简化数据结构和算法的实现,通过异步IO和pipelining等机制来实现高速的并发访问1. 数据库数组服务器中的数据库,redis.h/red

2、isServer结构的db数组中,每个redisDb结构就代表一个数据库。struct redisServer . / 一个保存着redisDb的数组,db中的每一项就是一个数据库 redisDb *db; . 每个数据库由一个redisDb结构表示,其中redisDb结构中的字典dict保存了数据库中所有的键值对。 redisDB结构体的定义:typedef struct redisDb . /保存数据库中所有的键值对 dict *dict; .Redis中的字典dict, 又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构; 字典中的每个键是独一无二的2. 字典结构每个数据库

3、由一个redisDb结构表示,其中redisDb结构中的字典dict保存了数据库中所有的键值对。 redisDB结构体的定义:typedef struct redisDb . /保存数据库中所有的键值对 dict *dict; .Redis中的字典dict, 又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构; 字典中的每个键是独一无二的。typedef struct dict dictht ht2; int rehashidx; int iterators; dict; typedef struct dicht dicEntry * table; unsigned long s

4、ize; 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). 在ht1上分配一个更大的哈希表;

5、2). “分多次”把ht0上的键值对重新散列到ht1上;3). 当处理完所有键值对时,让ht0指向新的哈希表;4. 对象结构redisObject对象来表示所有的key和value。对象结构特点对象的编码对象空转时长, 空转时长较高的那部分键会优先被Redis释放,从而回收内存。内存回收: 当一个对象的引用计数为0时,释放该对象内存资源。对象共享: 对象的应用计数另外一个功能就是对象的共享,当一个对象被另外一个地方使用时,可以直接在该对象引用计数上+就行。注意:Redis只对包含整数值的字符串对象进行共享二、Redis键值数据库的实现原理-原则数据库的操作、集群的设置简单, Redis内部维护

6、一个db数组,每个db都是一个数据库,默认16个数据库。用select命令来切换数据库。存储效率(memory efficiency)的考虑,可压缩数据、减少内存碎片、高速缓存和外存的数据交换算法等问题;快速响应时间(fast response time)与高吞吐量(high throughput)的折中方案;单线程(single-threaded): 简化数据结构和算法的实现,通过异步IO和pipelining等机制来实现高速的并发访问。 1. 键空间管理通过字典保存了数据库中的所有键值对,字典称为键空间。键空间的每个键都是一个字符串对象,键空间的值也就是数据库的值,可以是字符串对象,列表对

7、象,哈希表对象,集合对象,有序集合对象中的任何一种。添加新键、删除键、更新键、更新键、查找键读取一个键后,服务器会更新键的最近读取时间(LRU)时间,用于计算键的闲置时间。如果服务器在读取一个键时发现该键已经2. 设置生存时间和过期时间用expire命令或者pexpire命令可以对一个键设置生存时间, 自动删除生存时间为0的键。四个命令expire, pexpire, expireat, pexpireat。过期字典记录所有带过期时间的键程序可以通过过期字典检查一个给定键是否过期,检查给定键是否存在有过期字典并对该键是否过期进行判断3. 过期键删除策略系统提供三种删除策略删除过期键。 定时删除: 定时器控制。惰性删除:当获取键时检查键是否过期,过期就删除。定期删除:每隔一段时间,程序就对数据库进行一次检查,删除过期键4. 复制功能 Redis复制主要包括RDB复制和AOF复制,RDB快照方式,AOF通过将发送到服务器的写操作命令记录下来,形成AOF文件。在RDB复制中,每次执行特定的命令(SAVE或BGSAVE)时创建一个新的RDB文件时,过期的键不保存到新创建的R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论