Redis如何进行持久化存储

本文介绍了Redis的两种持久化机制:RDB快照持久化与AOF追加文件持久化。RDB通过定期保存内存数据到磁盘确保数据安全,而AOF则记录所有操作指令以追加方式写入文件实现持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题引入
我么知道,redis是内存存储,mysql是磁盘存储,如果电脑关机或断电,redis是如何保证数据不丢失的呢?

Redis的持久化有如下两种机制

  • RDB:将Reids在内存中的数据库定时dump到磁盘上(默认文件名dump.rdb
  • AOF:将Reids的操作日志以追加的方式写入文件(默认是appendonly.aof

一、RDB 快照持久化(默认开启)

redis可以将内存中的数据定期写入磁盘进行持久化。在进行持久化时,redis会创建子进程来执行。
持久化的三种触发机制:

1、定期自动触发(bgsave)

配置文件通常在放在/etc/redis/redis.conf目录

  #  ...
  #   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  # 每900秒,如果至少有1个key发生变化就触发持久化操作,后面两个意思一样
  save 300 10
  save 60 10000
2、手动触发

redis-cli中,执行下面三个命令:

save
这种触发会阻塞当前Redis服务器,即Redis不能再提供其他服务,直到备份完成为止。

BGSAVE
这种触发机制会执行fork()开启一个子线程在后台进行持久化,虽然fork阶段也会阻塞进程,但是时间极短,所以我们常用bgsave进行持久化。

SHUTDOWN
关闭redis时触发

二、AOF 追加文件持久化(默认未开启)

redis可以将执行的所有指令追加记录到文件中持久化存储,这是redis的另一种持久化机制。

通过修改配置文件redis.conf开启AOF机制:

appendonly yes  # 是否开启AOF,默认是no
appendfilename "appendonly.aof"  # AOF文件

AOF机制记录操作的时机

# appendfsync always  # 每个操作都写到磁盘中
appendfsync everysec  # 每秒写一次磁盘,默认
# appendfsync no  # 由操作系统决定写入磁盘的时机

注解
always: 一旦有数据发生改变就写到AOF
everysec: 每一秒都同步,这个是默认的方式
no: 从不同步,即不进行持久化

使用AOF机制的缺点是随着时间的流逝,AOF文件会变得很大。所以需要对AOF文件进行重写,比如说丢合并命令、丢弃无用命令等。重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件,这点和快照有点类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值