发布者:上海IT外包来源:http://www.lanmon.net点击数:853
蓝盟IT小贴士,来喽!
Redis是一个内存数据库,为了确保数据的持久性,Redis提供了两种持久性RDB和AOF。 以下是这两种持久化方式的实现原理。
RDB (标准)
RDB是以快照方式创建的,当满足某些条件时,redis会自动将内存中的数据永久化到磁盘。
触发快照的时间
符合自定义配置的快照规则。 (由redis.conf组成。 详情后述)
执行save或bgsave命令
执行flushall命令
执行主从复制操作(首次)

快照正在进行,即在文件生成过程中,在不修改现有的rdb文件的情况下,将旧文件替换为新文件,直到快照生成完成为止,确保rdb文件随时完整。
通过定期备份rdb文件,可实现redis数据的备份。 rdb是压缩的二进制文件,占用面积小,传输方便
RDB的优缺点
如果redis因缺陷:RDB而持久,并且突然异常终止,则最后一个快照之后的数据将丢失。 然而,根据组合设置自动快照可以减少数据丢失,并且保持在可接受的范围内。 如果数据很重要,可以使用AOF方法
优势:RDB方案可以最大限度地提高redis性能。 在快照期间,主进程只需要fork发出一个子进程,其馀的任务都将完成,父进程不需要磁盘I/O操作。 但是,如果数据集很大,fork子进程会花费很长时间,redis会在一段时间内停止处理请求。
AOF方式
默认情况下,redis未启用“仅打开文件”( aof )。 启动AOF后,redis每次收到更改redis数据的命令时,都会将该命令写入硬盘的AOF文件。 很明显,此过程会降低redis的性能,但在大多数情况下可以接受,同时使用性能良好的硬盘可以提高AOF的性能
命令传播
redis将执行的指令、指令引数、指令引数等发送至AOF程序。 当redis客户端执行命令时,通过连接向redis发送协议文本,在redis收到协议文本后,根据内容选择适当的命令函数,将协议文本转换为redis字符串对象,并执行命令函数
添加缓存
当AOF程序接收到命令参数时,它将字符串对象转换为协议内容,并将协议内容添加到AOF高速缓存中。 AOF缓存将在redisServer结构的aof_buf中添加新内容,并在aof_buf的末尾添加新内容。 AOF_buf保留所有未写入aof文件的协议文本。
蓝盟专业IT服务18年
分享到: