* ### 一、RDB (RedisDataBase)简介
```
意思就是将整个Reids的数据(通过二进制格式),持久化到磁盘里,注意 —— RDB是Redis默认的持久化机制
```
工作原理:
```
这里是引用fork子进程(默认bgwrite模式下是这个,这样的话就不会阻塞请求了,因为还有主线程在工作)进行当前数
据的二进制文件写入磁盘工作。每次都是对当前所有的数据进行二进制文件写入,然后会替换掉之前老的二进制文件。
(这就有个风险,如果不做定时备份的话,那么如果在替换过程中如果宕机了,整个二进制持久化数据就会全部丢失)
```
优点:
* 直接存储二进制数据的文件,大数据场景下恢复速度快
* 整个库Redis只有一个文件 —— 如果做了文件备份方案,比如每天归档一次数据,同时归档最近30天的数据,那这样的备份策略就很清晰明了,出现灾难性故障也好恢复。
* fork子进程,性能最大化
缺点:
* 只有一个文件在不备份的情况下同样也算是缺点,因为要替换,会造成宕机时文件的丢失风险
* fork子线程,如果数据量巨大,可能导致fork的过程阻塞几百毫秒到一秒
#### RDB 配置关注点(Redis.conf文件):
```
# 持久化数据到磁盘之 —— 频率,格式如下:
# save 900 1 900秒内至少有1个key被改变(那就会在900秒的时候执行rdb同步)
# save 300 10 300秒内至少有300个key被改变(那就会在900秒的时候执行rdb同步)
# save 60 10000 60秒内至少有10000个key被改变 (那就会在60秒的时候执行rdb同步)
# save "" 如果要禁用RDB模式就把下面这三行注释掉,并打开 save "" 的注释
save 900 1
save 300 10
save 60 10000
# 存储至本地数据库时(持久化到rdb文件)是否对这个二进制文件进行压缩数据,默认为yes
rdbcompression yes
# RDB后,本地持久化数据库文件名,默认值为dump.rdb(持久化的数据都会保存在这个文件里然后准备刷盘,可自定义文件名,特别是配置集群的话要改成对应机器的名字,另一个也是好区分)
dbfilename dump.rdb
# 工作目录
# 数据库镜像备份的文件放置的路径。
# 这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,
# 再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中
#
# AOF文件也会存放在这个目录下面
#
# 注意这里必须制定一个目录而不是文件,是因为redis容器中存放快照文件的路径就是/data
dir /data
```
再次说明:如果要禁用RDB模式就注释掉三行持久化频率,并打开save “” 注释,如下
```
save ""
# save 900 1
# save 300 10
# save 60 10000
```
### 二、AOF(AppendOnlyFile)简介
```
顾名思义,(通过原操作语句)追加的方式,增量追加到一个日志文件里。
```
#### **工作原理:**
```
根据配置执行原操作语句追加(每次写入都进行追加/每秒追加一次/永不追加),如果追加满了(默认64M)则会启动rewrite机制,老的日志会写入磁盘,与此同时新开一个临时日志写新来的语句,等老的写完磁盘后,重新开始到老的写。
```
#### **优点:**
* 更高的安全性,如果数据被篡改了,还可以根据redis-check-aof工具来帮助数据恢复(这个也是参数设置是否开启的)。
* 数据更完整
* 因为是追加语句的形式,所以相对来说宕机风险小
* 另外如果配置的是每次写入都进行追加使得持久化数据完整
#### 缺点
* 因为保存的是原始操作语句,在大数据恢复场景下全部要重新执行一遍,所以相对很慢
* 根据同步策略的不同,开启AOF后的运行效率也会相对慢于RDB(当然尽管这样每秒同步策略还是比较高效的)
#### AOF 配置关注点(Redis.conf文件):
# AOF开关 —— 设置为yes则开启,如果AOF开启则优先使用AOF
```
appendonly no
# AOF文件名称 (默认: "appendonly.aof")
# appendfilename appendonly.aof
# Redis支持三种同步AOF文件的策略:
#
# no: 不进行同步,系统去操作 . Faster.
# always: always表示每次有写操作都进行同步. Slow, Safest.
# everysec: 表示对写操作进行累积,每秒同步一次. Compromise.
#
# 默认是"everysec",按照速度和安全折中这是最好的。
# 如果想让Redis能更高效的运行,你也可以设置为"no",让操作系统决定什么时候去执行
# 或者相反想让数据更安全你也可以设置为"always"
#
# 如果不确定就用 "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
# AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作
# 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理
#
# 为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite
no-appendfsync-on-rewrite no
# Automatic rewrite of the append only file.
# AOF 自动重写机制
# 这个机制类似于RDB的二进制压缩机制,是用来缩小文件大小的 —— 比如对相同key的多次操作则只会保存最后一次操作,对多次操作,可以用一条语句完成的则改成一条语句.... 具体是会新建一个临时AOF文件,然后读取Redis中的数据(不是老的AOF哦),然后进行重写,写完后替换老的AOF文件
#关于主从部分,AOF机制是这样的,如果从在重写,主进来了新的追加,那么主会写自己AOF的同时,再写一份相同的在缓存区,子重写完后会通知主,那这个时候主会把缓存区的再追加到子AOF文件中
#【重写的触发条件】
#1.无rdb、aof的持久化操作
#2.无BGREWRITEAOF进行(手动进行aof重写操作)
#3.AOF文件大小超过阈值,默认1M
#4.AOF文件增长率超过阈值,默认100%
# 设置 percentage 为0就关闭这个特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
```
![](https://img.kancloud.cn/17/37/1737db8ce57573f2d6fb3c1696d1efe9_742x422.png)
- 开发语言
- java
- Java基础篇
- Java多线程篇
- 进程和线程的区别,进程间如何通信
- 什么是线程上下文切换
- 什么是死锁
- 死锁的必要条件
- Synchrpnized和lock的区别
- 什么是AQS锁
- 为什么AQS使用的双向链表
- 有哪些常见的AQS锁
- sleep()和wait()的区别
- yield()和join()区别
- Java线程池
- SpringBoot
- spring boot 项目开发常用目录结构
- Mybatis-Plus
- MyBatisPlus的CRUD操作
- Mybatis-Plus主键ID生成策略
- JVM
- JVM组成
- 字节码文件的组成
- 类的生命周期
- JVM、JRE和JDK
- arthas
- 使用阿里arthas不停机解决线上问题
- Java IO
- php
- 安装swoole
- composer部分
- windows安装composer
- composer PSR-4映射
- swoole部分
- swoole安装
- thrift部分
- linux下安装thrift
- PHP使用Thrift
- lnmp部分
- 架构的工作原理
- tp5框架生命周期
- zookeeper部分
- zookeeper安装
- sort
- TCP和UDP的区别
- 软件
- xdebug
- vscode+phpstudy+xdebug无法断点(踩坑记)
- Hyperf框架
- 注解
- 开发方案
- 抖音
- 抖音达人视频发布与统计
- 安全问题
- 微信
- 微信公众平台怎样实现用户点击链接向公众号发消息
- CDN加速OSS计费说明
- 程序设计
- 正则表达式
- 面向对象
- 设计模式
- 创建型模式
- 工厂模式
- 单例模式
- 结构型模式
- 适配器模式
- 行为型模式
- 策略模式
- 观察者模式
- 算法部分
- 位运算
- 排序算法
- 双指针
- 贪心算法
- 动态规划
- 二分查找
- 华为题库
- 技术栈
- mq
- MQ 的优势和劣势
- rabbitmq部分
- windows安装rabbitmq
- RabbitMQ 简介
- 工作模式
- 高级特性-消息可靠投递-confirm
- 高级特性-消息可靠投递-return
- 高级特性-Consumer Ack
- 高级特性-消费端限流
- 高级特性-TTL
- 高级特性-死信队列
- Centos7下安装rabbitmq
- 数据库
- MongoDB
- MongoDB 相关概念
- Mysql
- 索引总结
- MySQL架构图
- InnoDB和MyISAM的区别
- 索引设计与优化
- 悲观锁和乐观锁
- mysql如何解除死锁状态
- 查询慢
- 数据库主键的优缺点
- MySQL锁详解
- SQL语句分类
- 开查询账号
- 数据库迁移
- MySQL实战知识点
- mysql清理binlog日志
- 面试总结
- 事务隔离
- 聚集索引与非聚集索引
- B树和B+树
- docker
- docker-desktop安装的坑点
- docker在linux平台下安装
- Ubuntu安装Docker
- 常用命令
- 适用于 Linux 的 Windows 子系统没有已安装的分发版
- docker核心架构图
- docker安装lnmp环境
- docker安装redis
- dockerfile
- docker-compose
- linux
- Ubuntu 更换国内源
- centos
- 常用命令
- virtualbox
- 关于VirtualBox安装Ubuntu时界面显示不全,没有下一步选项
- linux复制当前目录到其子目录下
- 命令
- cat和>、>>
- crontab命令
- 查看当前目录的文件大小
- shell登录和非shell登录
- nginx
- 正向代理
- 反向代理
- 负载均衡
- 分割Nginx的access.log日志并保留30天一个月时长,自动删除多余的日志
- linux安装nginx
- git
- 生成秘钥
- 常用命令
- Linux中git保存用户名密码
- git清除账号密码
- 设置git store 存储账号密码
- git submodule 使用小结
- 微服务
- 微服务技术栈
- nacos
- Nacos服务分级存储模型
- Nacos配置管理-配置热更新
- Nacos集群搭建
- 微服务保护
- 初识Sentinel
- 隔离和降级
- es
- DSL查询语法-相关性算法
- DSL查询语法-FunctionScoreQuery
- DSL查询语法-BooleanQuery
- 搜索结果处理-排序
- es深度分页问题
- 自动补全
- elasticsearch 设置密码
- redis
- redis简介
- 安装redis扩展
- redis数据类型
- redis常见问题
- PHP 使用 Redis 实现分布式锁
- 缓存更新策略
- [ Redis ] AOF 和 RDB 的相关介绍以及相关配置
- 分布式锁的8大坑
- 分布式锁-Redisson
- 内存回收
- UV统计
- Redis主从集群
- redis哨兵
- Redis安装目录下常见文件
- 通讯原理概述
- linux安装redis
- windows
- Win系统端口被占用
- Windows10 WSL2限制cpu和内存
- jekins
- 持续集成
- centos卸载gitlab
- jenkins搭配gitlab的webhook实现自动化部署
- 大数据
- Linux集群分发脚本xsync
- hadoop
- hadoop安装
- hadoop配置文件
- clickhouse
- ClickHouse 安装部署
- flink
- 数据仓库
- zookeeper
- zookeeper分布式安装
- ZK集群启动停止脚本
- kafka
- kafka分布式安装
- kafka集群启动停止脚本
- flume
- flume分布式安装
- Flume配置
- Flume使用
- maxwell
- Maxwell简介
- Maxwell部署
- Maxwell使用
- MaxwellBootstrapUtility - Connections could not be acquired from the underlying database
- 线上事故