* ### 一、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
```

- 開發語言
- 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映射
- composer 鏡像同一個版本替換
- composer官方鏡像庫
- swoole部分
- swoole安裝
- thrift部分
- linux下安裝thrift
- PHP使用Thrift
- lnmp部分
- 架構的工作原理
- tp5框架生命周期
- zookeeper部分
- zookeeper安裝
- sort
- TCP和UDP的區別
- 軟件
- xdebug
- vscode+phpstudy+xdebug無法斷點(踩坑記)
- Hyperf框架
- 注解
- 通過注解定義路由
- go
- 開發方案
- 抖音
- 抖音達人視頻發布與統計
- 安全問題
- 微信
- 微信公眾平臺怎樣實現用戶點擊鏈接向公眾號發消息
- 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簡介
- linux安裝redis
- 安裝redis擴展
- redis數據類型
- redis常見問題
- PHP 使用 Redis 實現分布式鎖
- 緩存更新策略
- [ Redis ] AOF 和 RDB 的相關介紹以及相關配置
- 分布式鎖的8大坑
- 分布式鎖-Redisson
- 內存回收
- UV統計
- Redis主從集群
- redis哨兵
- 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
- 線上事故