> 文章列表 > redis持久化(13问)

redis持久化(13问)

redis持久化(13问)

1.redis持久化的作用是什么?

redis的持久化是为了解决redis 宕机后,数据的恢复问题。

2.redis持久化方案有哪些?

redis的持久化方案有3中

1.AOF (append only file ) 在文件中追加命令

2.RDB (Redis Database)内存快照(把内存中的数据写到二进制文件) 执行bgsave 生成rdb文件

3.AOF和RDB混合写 (4.0 以后支持混写)

3.AOF写日志的过程

AOF写日志的过程两步:

1.执行命令写内存

2.记命令日志到AOF文件

4.AOF写日志的两步可不可以交换顺序?

不可以,redis在写aof文件时没有做语法检查,如果在写内存前操作,遇到错误的命令,数据恢复时会报错。

5.持久化使用AOF会存在什么问题

持久化使用AOF会存在两个问题 。

1.数据丢失(第一步执行完,redis宕机,日志没有写到aof文件,恢复数据,会出现数据丢失)

2.阻塞主线程。aof写数据都是主线程操作,日志文件很大,会出现写磁盘很慢,出现阻塞主线程的问题。

6.如何解决AOF的数据丢失问题?

通过AOF的写回策略解决数据的丢失问题,写回策略也叫刷盘策略,把内存缓存区中的数据写到磁盘上

AOF有三种写回策略

1.always: 立马写回

2.Everysec: 每秒写回 先把日志写入aof的内存缓存区中,每隔1s 把数据写到磁盘。

3.no: 操作系统决定 先把日志写入aof的内存缓存区中,由操作系统决定什么时候把数据写会到磁盘。

三种写回策略的优缺点:

使用不同的写回策略,会不同程度的减少数据的丢失。

7.如何解决AOF阻塞主线程的问题

AOF阻塞主线程是因为随着数据量的增多,操作的频繁,AOF文件会越来越大,导致写磁盘越来越慢,故redis使用AOF的重写机制解决AOF文件过大的问题,AOF的重写机制是redis对AOF文件的压缩和优化,将对一个key的多条命令合并为一条命令和命令优化,比如将多个set命令合并为一个mset命令。从而减少AOF文件,减少对主线程的影响。

8.AOF文件一条一条执行写命令,redis恢复数据较慢,如何解决?

redis 持久化方案还提供了rdb的方式进行数据的持久化,rdb是对redis内存中某一时刻的快照数据保存成RDB文件(二进制文件),rdb相对aof文件较小,在redis进行数据及恢复时,进行load进内存。

9.如何生成rdb文件

redis生成rdb文件有两种方式,save和bgsave. save在主线程执行,会阻塞主线程。bgsave 会fork出一个子进程,专门用于写rdb文件不会阻塞主线程。bgsave是默认的rdb文件生成方式。

10.redis进行快照时,能进行写操作吗?

redis 利用操作系统提供的写时复制(copy on write)技术,在进行快照(bgsave)的时候,可以正常进行写操作。在写操作时,先copy一份副本进行写操作,bgsave在原来的数据进行快照,这样互相不干扰。

11.rdb的持久化方式会存在什么问题?

rdb的持久化方式是redis内存某一时间的快照数据,如果在两次快照之间,redis出现宕机,会丢失间隔中操作的数据。

12.如何解决rdb的数据丢失,多长时间进行一次rdb,频繁进行rdb会不会有影响?

在较短的时间进行一次redis进行一次RDB的持久化,可以减少数据的丢失,但是rdb的次数不是越短越好,频繁进行rdb,有2方面的影响。

1.如果第一个rdb的bgsave操作(快照全量数据)还没有结束,就进行第二次bgsave,同时rdb数据很大,会给磁盘带来较大的影响

2.bgsave操作时主进程fork出来的子进程,虽然bgsave不会阻塞主线程,但是fork操作属于主线程,频繁fork,会阻塞主线程,影响redis的读写。

对于持久化RDB,可以使用增量快照,进行第二次的快照RDB,不进行全量RDB.建议使用aof和rdb混合的方式进行持久化。aof 处理增量快照,rdb解决数据速度慢的问题,最终实现redis性能和安全性的平衡。

13.如何进行aof和rdb的混合写?

在两次快照(RDB)之间,使用aof记录增量数据,第二次快照(RDB)完成以后,删除之前的aof数据,平衡redis的性能和安全性。

爱淘粉丝网