1.redis中有哪些持久化方式?

​ redis中的持久化有两种方式,分别是RDB和AOF,其中RDB是redis默认的持久化方式。

2.RDB的工作原理

​ RDB持久化方式会创建(fork)一个子进程,子进程中的数据信息和主进程中的数据信息完全相同,主进程进行客户端的数据交互,子进程进行磁盘的IO操作,子进程进行持久化时会产生一个临时文件,并将数据写入到这个临时文件当中,当持久化完成之后会将主线程中的dump.rdb文件替换掉。

3.RDB触发机制

​ RDB中有以下几种触发持久化的方式:

自动触发RDB持久化

  • redis.conf文件中有一个关于save的配置,如下图,如果900s内有一个数据进行了更新(增删改),那么就会持久化;如果在300s内有10条数据进行了更新那么就会持久化;如果在60s内有10000条数据进行了更新那么就会持久化。即更改数据越多,持久化周期越小。
    在这里插入图片描述

  • 当使用"shutdown"命令关闭redis时会自动持久化

  • 当使用"fulldb"命令清除内存中的数据时会自动持久化

手动触发RDB持久化

  • 使用save/bgsave命令会持久化,save是使用主进程持久化,会使效率变低,不用;gbsave是使用子进程持久化。
4.RDB持久化的缺点

​ 当redis的服务器突然宕机之后,RDB还没来得及将数据持久化,会使数据丢失。

​ AOF就是来解决RDB丢失时间长的问题。

5.AOF的工作原理

​ 将Redis的操作日志以追加的方式写入文件,读操作是不记录的,当redis开机的时候,会将AOF日志文件中的命令进行读取操作。

​ AOF是将命令先记录在缓冲区缓冲区默认大小为1M,然后定时持久化到AOF持久化文件当中。AOF是没有fork主进程的,使用主进程进行的持久化。

6.开启AOF

​ redis中AOF默认是关闭的。

​ 在redis.conf文件中,将appendonly改为yes,如下:
在这里插入图片描述

7.AOF触发机制

​ AOF先将命令存在缓冲区,然后定时从缓冲区中向磁盘进行刷新,那么触发AOF从缓冲区向磁盘中刷新的机制是什么呢?

  • no:表示当缓冲区数据满了之后再同步到磁盘,这种显然不能使用,如果宕机之后,就会形成和RDB同样的问题。
  • always:同步持久化,每次发生数据变更时都会同步到磁盘。
  • everysec:表示一秒同步一次,这个也是默认值,但是可能会丢失1s以内的数据。
    在这里插入图片描述
8.RDB和AOF的优缺点
  • RDB:适合数据恢复,数据丢失多
  • AOF:保证数据安全,恢复数据慢
9.RDB和AOF的优先级

​ 如果同时开启RDB和AOF的话,那么redis开机之后读取的持久化文件是AOF的持久化文件,并且持久化时是按照AOF的策略去走的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐