redis的持久化

总括

redis提供了不同级别的持久化方式。

1.RDB(Redis DataBase) ——  默认生成dump.rdb文件

2.AOF(Append Only File)—— 默认生成appendonly.aof文件

1.RDB

1.1.什么是RDB

RDB的持久化方式能够在指定的时间间隔对数据进行快照存储。也就是将内存中的数据集快照写入磁盘。

它会单独创建(fork)一个子进程来进行持久化。会先将数据写入到一个临时文件中,待持久化过程结束后,替换原来的rdb文件。

主进程不进行任何的IO操作,这就确保了极高的性能。

1.2.如何触发RDB

1.2.1配置文件的方式
redis.conf文件部分
################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
当有以上操作时,就将数据同步到数据文件。
1.2.2命令save或者是bgsave
Save:save时只管保存,其它不管,全部阻塞
BGSAVE:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间。
1.2.3执行flushall命令

执行该命令也会产生dump.rdb文件,但里面是空的,无意义。

1.3.RDB的优缺点

1.3.1.优点

RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集。
RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心,非常适用于灾难恢复。
RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。
适合大规模的数据恢复,与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些

1.3.2.缺点
在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。


2.AOF

2.1什么是AOF

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

2.2开启与使用

AOF默认情况下是关闭的,我们需要到redis.conf中去开启。
将appendonly 修改为yes,默认文件名为“appendonly.aof”。开启后,之后的每一次写操作都会以日志的形式写入该文件。
############################## APPEND ONLY MODE ###############################

appendonly yes

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"
配置 Redis 多久才将数据 fsync 到磁盘一次。
有三种方式:
# appendfsync always
appendfsync everysec
# appendfsync no
always:同步持久化,每次发生数据变更会被立即记录到磁盘 ,性能较差但数据完整性比较好
everysec:出厂默认推荐,异步操作,每秒记录,如果一秒内宕机,有数据丢失
no:不进行持久化

2.3AOF重写 rewrite

2.3.1什么是rewrite
AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,
当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,
只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof。
2.3.2触发机制
Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。
no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
no-appendfsync-on-rewrite:重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性。
auto-aof-rewrite-min-size:设置重写的基准值
auto-aof-rewrite-percentage:设置重写的基准值

2.4优势

1.使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据。
2.写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题。
3.AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂。

2.5缺点

1.相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
2.aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于 Redis 持久的可能面试问题: 1. Redis持久有哪些方式? Redis持久有两种方式,一种是 RDB 持久,一种是 AOF 持久。 2. RDB 持久和 AOF 持久有什么区别? RDB 持久是将 Redis 在内存中的数据快照保存到磁盘上,而 AOF 持久则是将 Redis 执行的每条写命令记录到磁盘上。RDB 持久可以节约磁盘空间,但可能会丢失最近的一些数据,而 AOF 持久可以保证数据不会丢失,但可能会占用更多的磁盘空间和写入时间。 3. Redis持久机制是如何保证数据一致性的? Redis持久机制可以通过在每次写操作后立即同步到磁盘,或者设置定期同步时间来保证数据一致性。 4. Redis持久可以在运行时进行吗? 可以,Redis持久可以在运行时进行配置和切换,例如可以在运行时从 RDB 切换到 AOF 持久,或者从 AOF 切换到 RDB 持久。 5. Redis持久会对性能产生影响吗? 会,Redis持久会增加磁盘 I/O 开销,可能会对写入性能产生一定的影响,但可以通过合理的配置来平衡性能和数据一致性。 6. Redis持久可以与 Redis 集群一起使用吗? 可以,Redis持久可以与 Redis 集群一起使用,但需要注意配置文件的设置和数据同步的策略。 总之,Redis持久是保证数据一致性和可靠性的重要手段,需要根据具体的业务需求和性能要求来选择合适的持久方式,并进行合理的配置和优。在面试中,还需要了解 Redis 持久的原理、机制、优缺点、与集群的结合等方面的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值