内容简介:redis是内存数据库,即数据库状态都是存储于内存中,因此,当服务器重启或者断开后,数据便会丢失;为了解决数据丢失问题,便需要将数据从内存保持到磁盘中,这就是redis的数据持久化目前,redis实现了两种数据库持久化方案,一种是redis database,即将数据库的内容(key-value)保存为压缩的二进制文件
redis是内存数据库,即数据库状态都是存储于内存中,因此,当服务器重启或者断开后,数据便会丢失;为了解决数据丢失问题,便需要将数据从内存保持到磁盘中,这就是 redis 的数据持久化
目前,redis实现了两种数据库持久化方案,一种是 RDB
,另一种是 AOF
,让我们来聊聊这两种方案
RDB
redis database,即将数据库的内容(key-value)保存为压缩的二进制文件
即便redis服务进程退出,但是RDB文件仍然存在,这样当redis启动时便会自动载入RDB文件以此保证数据不丢失,其流程如下
1.手动生成RDB文件
redis有两个命令用于生成RDB文件,即 SAVE
与 BGSAVE
,这两个指令的用途都是一样的,唯一的区别在于
SAVE BGSAVE
其实现源码位于 rdb.c
中的 rdbSave()
与 rdbSaveBackground()
函数,有兴趣的小伙伴可以去看看
从区别来看,很明显,在执行RDB文件的创建首选指令 BGSAVE
2.自动生成RDB文件
一般来说RDB文件的生成并不需要用户去手动执行,redis提供了 save
指令允许用户设置执行条件: 在多少时间内服务器进行多少次修改 ;例如指令 save 500 1
即表示服务器如果满足在500秒之内对数据库执行了至少1次修改,那么就会执行RDB文件的生成
在redis的 serverCron()
时间事件中会去判断是否满足条件并执行RDB文件生成
3.自动加载RDB
RDB文件的生成可以手动执行,但是redis目前并没有提供手动加载RDB文件的操作指令,即RDB文件的载入工作是 在服务器启动的时候自动执行 的,并且在服务器载入RDB文件期间会一直处于堵塞状态
AOF
Append Only File,通过将redis服务器所执行的写指令保存为AOF文件来记录数据库状态
1.何时写入
当用户执行redis写操作时,便会将指令保存到AOF文件中,其流程如下
2.关于AOF重写
问题:随着数据库服务器运行,AOF文件中的内容会越来越多,因为每一条写指令都需要记录,也因此执行AOF文件来进行数据还原的时间也就越久
解决方案:为了解决这个问题,redis提供了AOF重写 BGREWRITEAOF
指令;原理即 从数据库中读取键现在的值,然后用一条指令去记录键值对,代替之前的多余命令 ,并重新生成一套写指令存储为新的AOF文件,并替换掉旧的AOF文件,这样新AOF文件就不会存在过多的冗余指令,体积包括执行时间也会小很多
3.何时加载AOF
当服务器重启动时会先检测是否有AOF文件,如果有就会载入AOF文件来实现数据一致,如果没有AOF则会检测是否执行RDB载入流程
加载
当服务器启动时会先检测是否有AOF文件,如果有则加载AOF文件,如果没有则会判断是否有RDB文件存在,如果有RDB文件,则加载RDB文件
相关文档:
原文地址:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Redis数据持久化、数据备份、数据的故障恢复
- iOS数据持久化:使用NSKeyedArchiver进行数据归档
- (实战)indexedDB + webSocket实现数据持久化保存数据
- docker数据持久化
- iOS数据持久化设计
- iOS数据持久化方案
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。