Redis 持久化(保存)

一、Redis 持久化

  • Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。
    在这里插入图片描述

2、Redis 持久化拥有以下三种方式:

2.1 快照方式(RDB, Redis DataBase)

  • 将某一个时刻的内存数据,以二进制的方式写入磁盘;

2.2 文件追加方式(AOF, Append Only File)

  • 记录所有的操作命令,并以文本的形式追加到文件中;

2.3 混合持久化方式

  • Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能减低数据丢失的风险。

二、Redis 持久化—RDB

1、RDB简介

  • RDB(Redis DataBase)是将某一个时刻的内存快照(Snapshot),以二进制的方式写入磁盘的过程。
  • RDB 的持久化触发方式有两类:一类是手动触发,另一类是自动触发。

2、手动触发

  • 手动触发持久化的操作有两个: save 和 bgsave
  • 它们主要区别体现在:是否阻塞 Redis 主线程的执行。

2.1 save 命令:使 Redis 处于阻塞状态

  • 在客户端中执行 save 命令,就会触发 Redis 的持久化,但同时也是使 Redis 处于阻塞状态,直到 RDB 持久化完成,才会响应其他客户端发来的命令,所以在生产环境一定要慎用。

2.2 bgsave 命令 :只有在 fork() 子进程时有短暂的阻塞

  • bgsave(background save)既后台保存的意思, 它和 save 命令最大的区别就是 bgsave 会 fork() 一个子进程来执行持久化,整个过程中只有在 fork() 子进程时有短暂的阻塞,当子进程被创建之后,Redis 的主进程就可以响应其他客户端的请求了,相对于整个流程都阻塞的 save 命令来说,显然 bgsave 命令更适合我们使用。

3、自动触发

  • RDB 自动持久化主要来源于以下几种情况:

3.1 save m n

  • save m n 是指在 m 秒内,如果有 n 个键发生改变,则自动触发持久化。
  • 参数 m 和 n 可以在 Redis 的配置文件中找到,例如,save 60 1 则表明在 60 秒内,至少有一个键发生改变,就会触发 RDB 持久化。
  • 自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。 注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化。

3.2 flushall

  • flushall 命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了 flushall 命令之后,则会触发自动持久化,
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值