小飞知识库 | YeLu🤠MiLu🤪 小飞知识库 | YeLu🤠MiLu🤪
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YeLu

爱技术的YeLu🤠
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Redis

    • redis介绍

    • redis安装

    • redis基础

      • 五种数据类型
      • 基本命令
      • 持久化模式
        • 1、rdb 模式
        • 2、aof 模式
          • 2.1、打开aof模式
          • 2.2、aof 数据同步规则
          • 2.3、aof 保存的数据的含义
          • 2.4、重写问题
        • 3、混合持久化
          • 3.1、开启混合持久化
          • 3.2、混合持久化截图
          • 注意:在高版本的Redis中默认使用的是 混合持久化的策略
      • 数据淘汰策略
    • redis进阶

  • 缓存
  • Redis
  • redis基础
YeLu🤠
2023-04-04
目录

持久化模式

什么是持久化? Redis本身的数据 是写到 内存中 假设断电的情况下 数据会发生丢失 那么假设我们希望的是 数据不丢失 或者 只是丢失 很少的一部分 那么这种情况应该怎么办呢? 持久化这个概念 就在这种情况下 应运而生了

# 1、rdb 模式

rdb模式 又称为 快照模式 :在rdb中保存的都是二进制的数据 因为存的是二进制数据 所以这种模式在读取数据的时候 会 非常快 也是 Redis默认的持久化方式

默认情况下 硬盘保存的数据的名字 dump.rdb

持久化:简单的说就是把原来写在内存的数据 同步到硬盘上进行保存

默认的数据的持久化模式是 rdb、那么这个数据在什么时候进行同步呢?

所以一定得有 触发的条件

查看默认的持久化文件

查看 redis.conf 的 rdb 配置如下

save 900 1
save 300 10
save 60 10000

#   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
1
2
3
4
5
6
7

这种模式 一般情况下 不用来做开发

这种模式最经典的使用地方:数据的备份 而且是在某一时刻 所有内存数据的备份

rdb模式到底是怎么进行备份的?

当我们触发的条件 满足要求的时候 这个时候首先将硬盘上的这个文内( dump.rdb)容给删除

删除之后 将 我们的内存里面所有的数据 从新写入到 硬盘 这就有一个很大的缺陷 如果删除文件之后 断电了 那么所有的数据 全部就丢失了

# 2、aof 模式

这种模式和上面模式最大的不同点是:这种模式在保存数据的时候 保存的是 操作的命令 因为保存的是命令所以在速度上来说就要比 rdb模式要略逊一筹

疑问:前面我们说 rdb是默认是持久化方式 现在又开启了 aof 那么你们觉得 这两种模式中 会以谁优先呢?

这两种模式同时存在的时候 会以aof模式优先

# 2.1、打开aof模式

编辑 redis.conf 文件

appendonly yes # 打开aof模式
# 更改aof模式下文件的名字 
# 默认存储数据的文件的名字 `appendonly.aof`
appendfilename "appendonly.aof"   
1
2
3
4

打开之后会生成一个文件如下

# 2.2、aof 数据同步规则

  • aof 触发内存数据和硬盘数据 有三种同步的规则
# 表示永远不同步,不保存。当你需要的时候,使用操作系统刷新数据
# no: don't fsync, just let the OS flush the data when it wants. Faster. 
# 每次key改变的时候都同步 效率慢
# always: fsync after every write to the append only log. Slow, Safest. 
# 每秒触发一次同步
# everysec: fsync only one time every second. Compromise. 

# appendfsync always
appendfsync everysec    
# appendfsync no
1
2
3
4
5
6
7
8
9
10

注意:在开发中 一般情况下 都会使用 aof模式 (低版本中) 而且一般情况下 要考虑效率 和同步数据丢失的问题 一般情况下 会选择 everysec 作为我们同步策略

玩下 aof 往redis里面放入数据,再查看 appendonly.aof 文件内容

# 2.3、aof 保存的数据的含义

研究下保存数据的含义

*3      * :表示的是命令的开始(暂时这么认为  严格意义上来说  *代表的是 array)    3:代表的是这个命令有三部分  set  

xff   123

$3      $:当成一个语法规则记住   3:下面这个命令的字符的长度
set

$8
xff

$3
123
1
2
3
4
5
6
7
8
9
10
11
12

# 2.4、重写问题

当执行多个相同的命令的时候,aof文件里面就会存在很多相同的记录,可以使用手动重写对aof文件进行优化

插入几条相同的命令如下

incr xff
incr xff
1
2

查看aof文件如下

*2
$4
incr
$3
xff
*2
$4
incr
$3
xff
1
2
3
4
5
6
7
8
9
10

① 手动重写

修改 redis.conf 关闭混合持久化,修改后记得重启redis服务

# 先在 redis.conf 文件 关闭混合持久化
# aof-use-rdb-preamble 默认是 yes
aof-use-rdb-preamble no
1
2
3

进入redis客户端,手动执行命令

./redis-cli
bgrewriteaof # 这个命令表示的是手动的进行重写

[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
127.0.0.1:6379>
1
2
3
4
5
6
7

查看重写后的aof文件

*3
$3
SET
$3
xff
$1
2
1
2
3
4
5
6
7

可以看见incr优化了

② 自动重写

# 下面表示的意思是自动的重写的条件

# 只有达到100%的增长那么才会触发aof文件进行重写
auto-aof-rewrite-percentage 100
# 表示的是 aof文件最小的重写的大小
# 至少 aof文件的大小 达到 64M+64M=128M的时候(100%的增长) 这个aof文件就会自动被重写
auto-aof-rewrite-min-size 64mb
1
2
3
4
5
6
7

# 3、混合持久化

# 3.1、开启混合持久化

aof-use-rdb-preamble yes
1

怎么玩呢,先打开 混合持久化 再往redis里面存入数据,然后 bgrewriteaof 手动重写 aof 文件 ,在打开 aof 文件 可以看到 文件里面的命令已经变成 二进制文件了

# 3.2、混合持久化截图

当手动重写后,可以看见命令全部变成二进制文件了

这个时候我们继续往redis里面插入数据,可以看见aof文件下面存储的是命令,这个就是混合持久化

# 注意:在高版本的Redis中默认使用的是 混合持久化的策略

#redis
最近更新: 2025/07/30, 15:37:56
基本命令
数据淘汰策略

← 基本命令 数据淘汰策略→

最近更新
01
服务端配置
07-30
02
frp 安装
07-30
03
Prometheus采集Springboot应用
02-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | YeLu🤠MiLu🤪 | MIT License 蜀ICP备2024116879号 | 川公网安备51012202001998号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
欢迎你,我的朋友
看板娘