Kevin's blog Kevin's blog
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档

Kevin

你可以迷茫,但不可以虚度
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档
  • 基础

  • JVM

  • Spring

  • Redis

    • 基础
    • 位图|布隆
    • 过期删除
    • 持久化
      • 1 RDB持久化(快照持久化)
        • 1.1 RDB持久化是怎么触发的?
        • 1.1.1 save触发方式
        • 1.1.2 bgsave触发方式
        • 1.1.3 自动触发方式
        • 1.2 RDB有什么优势和劣势?
        • 1.2.1 RDB优势
        • 1.2.1 RDB劣势
      • 2 AOF持久化(append-only file)
        • 2.1 AOF的持久化是怎么触发的?
        • 2.1.1 appendfsync always
        • 2.1.2 appendfsync everysec
        • 2.1.3 appendfsync no
        • 2.2 AOF持久化3种触发方式的对比?
        • 2.3 AOF方式什么时候会出现文件重写?
        • 2.4 AOF有什么优势和劣势?
        • 2.4.1 AOF优势
        • 2.4.2 AOF劣势
      • 3 混合持久化
      • 4 数据怎么恢复?
    • 缓存雪崩|击穿|穿透
    • 集群
    • Redisson分布式锁
  • 消息中间件

  • 持久化

  • 算法

  • 网络

  • 系统架构

  • 知识整理
  • Redis
luoxiaofeng
2022-05-08
目录

持久化

Redis的持久化方式:快照(snapshotting,RDB),只追加文件(append-only file,AOF)。

# 1 RDB持久化(快照持久化)

RDB持久化是将内存中的数据以快照的方式写进二进制文件中,默认的文件名为:dump.rdb。

快照持久化是Redis默认采用的持久化方式。

# 1.1 RDB持久化是怎么触发的?

RDB支持3种触发方式:save,bgsave,自动化。

# 1.1.1 save触发方式

该命令会阻塞redis服务器,命令执行期间redis不能执行其他命令,直到RDB过程结束。

# 1.1.2 bgsave触发方式

该命令不会阻塞redis服务器,命令执行期间redis还可以响应客户端需求。

具体过程是redis进程执行fork操作创建一个子进程,RDB持久化过程由该子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短**。Redis内部所有RDB操作基本上都是用bgsave命令。**

# 1.1.3 自动触发方式

自动触发是由我们配置文件来完成的。在redis.conf配置文件中默认有此下配置:

save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发bgsave命令创建快照。

save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发bgsave命令创建快照。

save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发bgsave命令创建快照。

# 1.2 RDB有什么优势和劣势?

# 1.2.1 RDB优势

1)RDB文件紧凑,全量备份,非常适合数据备份和灾难恢复。

2)RDB过程可通过子线程进行,不影响redis主线程。

3)恢复大数据集时,恢复速度比AOF恢复速度快。

# 1.2.1 RDB劣势

快照持久化期间修改的数据不会被保存,可能丢失数据。

# 2 AOF持久化(append-only file)

AOF的工作机制很简单,就是redis把每一个收到的写命令都追加保存到AOF文件中。

与快照持久化相比,AOF持久化 的实时性更好,因此已成为主流的持久化方案。

默认情况下Redis没有开启。

AOF(append only file)方式的持久化,可以通过appendonly参数开启: appendonly yes

# 2.1 AOF的持久化是怎么触发的?

在Redis的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:

# 2.1.1 appendfsync always

每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度。

# 2.1.2 appendfsync everysec

异步操作,每秒钟同步一次数据到硬盘,如果1秒内宕机,有数据丢失。

# 2.1.3 appendfsync no

让操作系统决定何时进行同步。

# 2.2 AOF持久化3种触发方式的对比?

# 2.3 AOF方式什么时候会出现文件重写?

由于AOF方式会记录所有的写命令,对于同一份数据来说,AOF日志文件要比RDB快照文件更大。随着持久化文件越来越大,redis会fork出子线程来将文件进行重写。

重写AOF文件不会读取旧文件,而是将内存中的数据内容用命令的方式重写一个新的AOF文件。

# 2.4 AOF有什么优势和劣势?

# 2.4.1 AOF优势

1)AOF可以更好地保护数据不丢失,一般设置每隔1秒同步一次数据,所以最多丢失1秒的数据。

2)AOF日志文件每次写入数据都是追加,写入性能很高。

3)AOF可以后台操作,不影响客户端读写。

4)AOF非常适合针对误删等情况进行数据恢复。比如有人不小心执行了flushall命令清空了数据,可以通过删除AOF文件中最后一条flushall命令,再将AOF文件放回去,执行恢复操作,恢复所有数据。

# 2.4.2 AOF劣势

1)针对同一份数据,AOF日志文件通常比RDB快照文件大。

# 3 混合持久化

RDB和AOF的特点:

Redis 4.0 带来了一个新的持久化选项——混合持久化。

重启 Redis 时,我们很少使用 RDB来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志性能相对 RDB来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。

通过如下配置可以开启混合持久化(必须先开启aof):

#aof‐use‐rdb‐preambleyes

AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,重写完新的AOF文件覆盖原有的AOF文件,完成新旧两个AOF文件的替换。

# 4 数据怎么恢复?

例:

#Redis
上次更新: 2022/06/02, 11:20:10
过期删除
缓存雪崩|击穿|穿透

← 过期删除 缓存雪崩|击穿|穿透→

最近更新
01
AI是如何学习的
06-05
02
chatGpt提示原则
06-05
03
提示词工程实践指南
06-05
更多文章>
| Copyright © 2022-2025 Kevin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式