Redis中单机数据库的实现】的更多相关文章

1. 内存操作层 zmalloc 系接口 redis为了优化内存操作, 封装了一层内存操作接口. 默认情况下, 其底层实现就是最简朴的libc中的malloc系列接口. 如果有定制化需求, 可以通过配置方式, 将底层内存操作的实现更换为tcmalloc或jemalloc库. redis封装的这一层接口, 其接口定义与默认实现在zmalloc.h与zmalloc.c中. 其默认实现支持在O(1)复杂度的情况下返回内存块的大小. 具体实现上的思路也十分简朴: 就是在内存块头部多分配一个long的空间…
目录 前言 1. Redis中的数据库 2. 数据库的键空间 3. 键的生成时间与过期时间 4. Redis中的过期键删除策略 5. AOF.RDB和复制功能对过期键的处理 5.1 生成 RDB 文件 5.2 载入 RDB 文件 5.3 AOF 文件写入 5.4 AOF 重写 5.5 复制 6. 数据库通知 最后 前言 参考资料:<Redis设计与实现 第二版>: 第二部分为单机数据库的实现,主要由以下模块组成:数据库.持久化.事件.客户端与服务器: 本篇将介绍 Redis 中的数据库: 1.…
前面我们花了很多的时间介绍了 redis 中基本的数据结构,及其内部的实现情况,这些都是非常基础的东西,可能不经意间你就会用到他们,希望你花点时间了解一下. 接下来,我们将走近 redis 数据库,学习各种操作 redis 的命令,并介绍它的一些实现策略以及集群配置等等内容. 一.redis 中的数据库 server.h/redisServer 结构中有一个字段,db 字段: redisDb *db; db 被定义成一个 redisDb 数组,其中 redisDb 的定义如下: typedef…
参考:http://blog.sina.com.cn/s/articlelist_1221155353_0_1.html 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids也不例外.在Redis提供的诸多命令中,EXPIRE.EXPIREAT.PEXPIRE.PEXPIREAT以及SETEX和PSETEX均可以用来设置一条Key-Value对的失效时间,而一条Key-Value对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确).可以说,主键失效这…
单机数据库 ·Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存. ·客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库. ·数据库主要由dict和expires两个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键的过期时间. ·因为数据库由字典构成,所以对数据库的操作都是建立在字典操作之上的. ·数据库的键总是一个字符串对象,而值则可以是…
概要 本部分内容主要是研究单机数据库.分别介绍单机数据库的实现原理,数据库的持久化,Redis事件,服务器维护管理客户端以及单机服务器的运作机制. 数据库 数据库结构 Redis数据库由redis.h/redisDb定义,结构如下: typedef struct redisDb { dict *dict; //字典,用来保存这个数据库中所有的键值对 dict *expires; //字典,用来存放过期时间 dict *blocking_keys; /* Keys with clients wai…
本文主要介绍Redis的数据库结构,Redis两种持久化的原理:RDB持久化.AOF持久化,以及Redis事件分类及执行原理.最后,分别介绍了单机班Redid客户端和Redis服务器的使用和实现原理.本文篇幅较长,全文学习请提前做好心里准备,当然也可直接跳到某一段学习某一特定部分.   一.Redis数据库 0. 导读 Redis 服务器的所有数据库都保存在 redisServer.db 数组中, 而数据库的数量则由 redisServer.dbnum 属性保存. 客户端通过修改目标数据库指针,…
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child { margin-top: 0; padding-top: 0; } a:first-child h1, a:first-child h2, a:first-child h3, a:fi…
1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库: struct redisServer { // ... redisDb *db; /* 一个数组,保存着服务器中的所有数据库 */ // ... int dbnum; /* 创建多少个数据库,由服务器配置的database选项决定,默认为16个数据库,0-15 */…
本文参考:http://blog.csdn.net/spring21st/article/details/15771861 http://stackoverflow.com/questions/5756067/how-to-empty-a-redis-database http://stackoverflow.com/questions/4006324/how-to-atomically-delete-keys-matching-a-pattern-using-redis 批量删除KeyRedi…