Redis单机数据库的实现

1.数据库

1.1 服务器中的数据库

        dbnum属性是由服务器配置决定的,默认值是16,所以默认会初始创建16个数据库,如下图:

1.2 切换数据库

        每个Redis客户端都有自己的目标数据库,每当客户端执行操作时,目标数据库就会成为这些操作命令的操作对象。

 

1.3 数据库键空间

   

1.3.1 添加新键

        添加新键值对到数据库,实际上就是将新键值对添加到键空间的字典中去,其中键为字符串对象,值为任意一种Redis对象。

1.3.2 删除 键

 1.3.3 更新键

         对一个数据库键进行更新,实际上就是对键空间里面键所对应的值对象进行更新,根据值对象的类型不同,更新的具体方法也会有所不同。

1.3.4 对键取值

 1.3.5 其他键空间操作

1.3.6 读写键空间时的维护操作

 

1.4 设置键的生存时间或过期时间

   

1.4.1 设置过期时间

  命令转换图

 

1.4.2 保存过期时间

          在实际中键空间的键和过期字典的键都指向的是同一个键对象,所以不会出现任何重复对象,也不会造成空间浪费。 

1.4.3 移除过期时间

1.4.4 计算并返回剩余生存时间

 

1.4.5 过期键的判定

  

1.5 过期键删除策略

 1.5.1 定时删除

1.5.2 惰性删除

1.5.3 定期删除

1.6 Redi的过期键删除策略

         Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种策略,服务器可以很好的合理使用CPU时间和避免浪费内存空间之间得到平衡。

1.6.1 惰性删除策略实现

 

1.6.2 定期删除策略实现

1.7 AOF、RDB和复制功能对过期键的处理

1.7.1 生成RDB文件

 

 1.7.2 载入RDB文件

1.7.3 AOF文件写入

1.7.4 AOF重写

1.7.5  复制

 1.8 数据库通知

 1.8.1 发送通知

 1.8.2 发送通知的实现

 1.9 重点回顾

2.RDB持久化

2.1 RDB文件的创建于载入

 

 

 2.1.1 SAVE命令执行时的服务器状态

2.1.2 BSAVE命令执行时的服务器状态

         因为BSAVE命令是由子进程来执行,所以此时Redis服务器任然可以继续处理客户端的请求。但是,在BSAVE命令执行期间,服务器处理SAVE,BSAVE,BGERWRITEAOF命令的方式与平时有所不同。

2.1.3 RDB文件载入时服务器的状态

        会一直处于阻塞状态,直到载入工作完成。

2.2 自动间隔性保存

 2.2.1 设置保存条件

 2.2.2 dirty计数器和lastsave属性

 2.2.3 检查保存条件是否满足

 

 2.3 RDB文件结构

 

2.4 重点回顾

3.AOF持久化

 3.1 AOF持久化实现

3.1.1 命令追加

3.1.2 AOF文件的写入与同步

  

  

3.2 AOF文件的载入与数据还原

 3.3 AOF文件重写

  

3.3.1 AOF文件重写实现

  

 

3.3.2 AOF后台重写

 

 

3.4 重点回顾

 

4.事件

4.1 文件事件

4.1.1 文件事件处理器的构成

 4.1.2 I/O多路复用程序的实现

 4.1.3 事件类型

4.1.4 API

4.1.5 文件事件的处理器

1.连接应答处理器 

2.命令请求处理器 

3.命令回复处理器

 

 4.客户端与服务器连接事件试例

 4.2 时间事件

4.2.1 实现

 

 4.2.2 API

 4.2.3 时间事件实例应用:serverCron函数

4.3 事件的调度与执行

  

 4.4 重点回顾

 

5.客户端

5.1 客户端属性

 

5.1.1 套接字描述符

 

 

5.1.2 名字

        默认情况下连接到服务器的客户端的没有名字的;但是客户端可以使用命令设置名字。

5.1.3 标志

         标志太多,想了解的小伙伴可以自己查询。

 5.1.4 输入缓冲区

5.1.5 命令与命令参数

 

 5.1.6 命令的实现函数

5.1.7 输出缓冲区

        执行的命令的回复都会被保存在输出缓冲区中,每个客户端都有两个输出缓冲区使用,一个缓冲区的大小固定,一个大小可变。

 

5.1.8 身份验证

 5.1.9 时间

 

5.2 客户端的创建与关闭

5.2.1 创建普通客户端

 

5.2.2 关闭普通客户端

 

5.2.3 Lua脚本的伪客户端 

 5.2.4 AOF文件的伪客户端

5.3 重点回顾

 

6.服务器

6.1 命令请求的执行过程

 

6.1.1 发送命令请求

 

 6.1.2 读取命令请求

6.1.3 命令执行器1:查找命令实现

   

 

6.1.4 命令执行器2:执行预备操作

         这里只是举了一些情况,实际还有更多的预备操作,而且在集群的情况还有更多的操作。

6.1.5 命令执行器3:调用命令的实现函数

 

6.1.6 命令执行器4:执行后续工作 

6.1.7 将命令回复发给客户端

 

 6.1.8 客户端接收并打印命令回复

6.2 serverCron函数

 

6.2.1  更新服务器时间缓存

 6.2.2 更新LRU时钟

 6.2.3 更新服务器每秒执行命令次数

 

6.2.4 更新服务器内存峰值记录

 

6.2.5 处理SIGTERM信号

 6.2.6 管理客户端资源

6.2.7 管理数据库资源

 6.2.8 执行被延迟的BGERWRITAOF

6.2.9 检查持久化操作的状态

 6.2.10 将AOF缓冲区中的内容写入AOF文件

6.2.11 关闭异步客户端

        在这一步服务器会关闭那些缓冲区大小超出限制的客户端。

6.2.12 增加cronloops计数器的值

 

 

6.3 初始化服务器

 6.3.1 初始化服务器状态结构 

  

6.3.2 载入配置项

 6.3.3 初始化服务器的数据结构

 6.3.4 还原数据库状态

  6.3.5 执行事件循环 

 

6.4 重点回顾

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值