redis持久化就是把内存中的数据持久化到磁盘中,防止数据丢失。---当redis服务器开启时,会把磁盘中的数据加载到内存中进行计算。
redis提供了两种持久化方式:
RDB和AOF.
RDB持久化
它是每隔一段时间进行快照存储。--它是一个二进制文件,里面的内容打开后无法看懂。
触发机制:
[1]save---手动触发
[2]bgsave--手动触发
[3]通过配置文件--自动触发【redis会自动配置】
(一)save触发
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
执行完成之后如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。
bgsave触发:
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
bgsave在执行该命令时会fork出一个新的线程,单独执行rdb持久化操作,而不影响其他客户对redis服务的操作。
自动执行快照
不管使用save还是bgsave都需要手动输入。我们也可以通过配置文件完成自动化rdb操作。
RDB快照持久化优缺点:
优点: ----数据恢复速度快。
缺点: ----数据完整性差--会丢失最后一段时间的数据。
AOF持久化
日志追加持久化,当我们执行写操作,会触发一个函数write,把会把写操作的命令追加到一个日志文件appendfile中。当服务器启动时会把appendfile中的命令重新执行一遍。默认不开启。
手动在配置文件中开启AOF模式。
AOF优缺点:
优点: 数据完整性高---突发情况只会丢失最后一条指令或者最后一秒之内的指令
缺点: 数据恢复慢。--因为在开始redis的时候,要再次执行关于写操作的语句
如果rdb和aof都使用,当服务器重启时会加载哪个文件?
先加载AOF的文件【它以数据完整性为主】。