有书共读:《Redis设计与实现》第九章和第十章读书笔记
第9章: 数据库
Redis服务器的所有数据库都保存在redisServer.db中数组中,而数据库的数量则由redisServer.dbnum属性保存。
客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库。
客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库。
数据库主要由dict和expires两个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键的过期时间。
因为数据库由字典构成,所以对数据库的操作都是建立在字典操作之上的。
数据库的键总司一个字符串对象,而值则可以是任意一种Redis对象类型,包括字符串对象,哈希表对象、集合对象、列表对象和有序集合对象,分别对应字符串键、哈希表键、集合键、列表键和有序集合键。
expires字典的键指向数据库中的某个键,而值则记录了数据库键的过期时间,过期时间是一个以毫秒为单位的UNIX时间戳。
Redis使用惰性删除和定期删除两种策略来删除过期的键:惰性删除策略只在碰到过期键时才进行删除操作,定期删除策略则每隔一段时间主动查找并删除过期键。
执行SAVE命令或者BGSAVE命令所产生的新RDB文件不会包含已经过期的键。
执行BGREWRITEAOF命令所产生重写AOF文件不会包含已经过期的键。
当一个过期键被删除之后,服务器会追加一条DEL命令到现有AOF文件的末尾,显式地删除过期键。
当主服务器删除一个过期键之后,它会向所有从服务器发送一条DEL命令,显式地删除过期键。
从服务器即使发现过期键也不会自作主张地删除它,而是等待主节点发来DEL命令,这种统一、中心化的过期键删除策略可以保证主从服务器数据的一致性。
当Redis命令对数据库进行修改之后,服务器会根据配置向客户端发送数据库通知。
第10章:RDB持久化
Redis是一个键值对数据库服务器,服务器中的非空数据库以及它们的键值对被统称为数据库状态。
Redis提供的RDB持久化功能,可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中,RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原成RDB文件时的数据库状态。
SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器。BGSAVE命令由子进程执行保存操作,所以该命令不会阻塞服务器。
第10章:RDB持久化
Redis是一个键值对数据库服务器,服务器中的非空数据库以及它们的键值对被统称为数据库状态。
Redis提供的RDB持久化功能,可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中,RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原成RDB文件时的数据库状态。
SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器。BGSAVE命令由子进程执行保存操作,所以该命令不会阻塞服务器。
服务器状态中会保存所有用save选项设置的保存条件,当任意一个保存条件被满足时,服务器会自动执行BGSAVE命令。
RDB文件是一个经过压缩的二进制文件,由多个部分组成。
对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。
#设计##读书笔记##笔记#RDB文件是一个经过压缩的二进制文件,由多个部分组成。
对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。