聊聊Redis的持久化機制,到底採用RDB還是AOF呢?
這篇文章帶大家了解Redis的持久化機制(RDB和AOF),聊聊到底採用RDB還是AOF呢?希望對大家有幫助!
RDB
1. 什麼是RDB
RDB:每隔一段時間,把記憶體中的資料寫入磁碟的臨時文件,作為快照,恢復的時候把快照文件讀進記憶體。如果宕機重啟,那麼記憶體裡的資料肯定會沒有的,那麼再次啟動redis後,則會恢復。 【相關建議:Redis影片教學】
2.備份與復原
##記憶體備份--> 磁碟暫存檔案臨時檔案--> 恢復到記憶體
3. RDB優劣勢
- 優勢
-
- ##每隔一段時間備份,全量備份
- 災備簡單,可以遠端傳輸
- 子程序備份的時候,主程序不會有任何io操作(不會有寫入修改或刪除),保證備份資料的的完整性
- 相對AOF來說,當有更大檔案的時候可以快速重啟恢復
- 發生故障是,有可能會遺失最後一次的備份資料
- 子程序所佔用的記憶體比會和父行程一模一樣,如會造成CPU負擔
- 由於定時全量備份是重量級操作,所以對於即時備份,就無法處理了。
- #儲存位置,可以在redis.conf自定義:
- /user/local/redis/working/dump.rdb
-
##
save 900 1 save 300 10 save 60 10000 save 10 3
登入後複製* 如果1个缓存更新,则15分钟后备份 * 如果10个缓存更新,则5分钟后备份 * 如果10000个缓存更新,则1分钟后备份
登入後複製
yes:如果save程序出錯,則停止寫入操作
- no:可能造成資料不一致
yes:開啟rdb壓縮模式
- no:關閉,會節省cpu損耗,但是檔案會大,道理同nginx
yes:使用CRC64演算法校驗對rdb進行資料校驗,有10%效能損耗
- no:不校驗
總結
#RDB適合大量資料的恢復,但是資料的完整性和一致性可能會不足。
AOFAOF特徵
#以日誌的形式記錄使用者要求的寫入操作。讀取操作不會記錄,因為寫入操作才會儲存。
- 檔案以追加的形式而不是修改的形式。
- redis的aof恢復其實就是把追加的檔案從開始到結尾讀取執行寫入操作。
- 優勢
AOF更耐用,可以以秒位為單位備份,如果發生問題,也只會遺失最後一秒的數據,大大增加了可靠性和數據完整性。所以AOF可以每秒備份一次,使用fsync操作。
- 以log日誌形式追加,如果磁碟滿了,會執行redis-check-aof 工具
- 當資料太大的時候, redis可以在背景自動重寫aof。當redis繼續把日誌追加到舊的檔案中去時,重寫也是非常安全的,不會影響客戶端的讀寫操作。
- AOF 日誌包含的所有寫入操作,會更方便redis的解析復原。
- 缺點
#相同的數據,同一份數據,AOF比RDB大
- 針對不同的同步機制,AOF會比RDB慢,因為AOF每秒都會備份做寫操作,這樣相對與RDB來說就略低。每秒備份fsync沒毛病,但如果客戶端的每次寫入就做一次備份fsync的話,那麼redis的效能就會下降。
- AOF發生過bug,就是資料復原的時候資料不完整,這樣看起來AOF會比較脆弱,容易出現bug,因為AOF沒有RDB那麼簡單,但呢為了防止bug的產生,AOF就不會根據舊的指令去重構,而是根據當時快取中存在的資料指令去做重構,這樣就更加健壯可靠了。
- AOF的設定
`# AOF 默认关闭,yes可以开启
appendonly no
# AOF 的文件名
appendfilename "appendonly.aof"
# no:不同步
# everysec:每秒备份,推荐使用
# always:每次操作都会备份,安全并且数据完整,但是慢性能差
appendfsync everysec
# 重写的时候是否要同步,no可以保证数据安全
no-appendfsync-on-rewrite no
# 重写机制:避免文件越来越大,自动优化压缩指令,会fork一个新的进程去完成重写动作,新进程里的内存数据会被重写,此时旧的aof文件不会被读取使用,类似rdb
# 当前AOF文件的大小是上次AOF大小的100% 并且文件体积达到64m,满足两者则触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb`
登入後複製到底採用RDB還是AOF呢?
如果你能接受一段時間的快取遺失,那麼可以使用RDB-
如果你對即時性的資料比較care ,那就用AOF
`# AOF 默认关闭,yes可以开启 appendonly no # AOF 的文件名 appendfilename "appendonly.aof" # no:不同步 # everysec:每秒备份,推荐使用 # always:每次操作都会备份,安全并且数据完整,但是慢性能差 appendfsync everysec # 重写的时候是否要同步,no可以保证数据安全 no-appendfsync-on-rewrite no # 重写机制:避免文件越来越大,自动优化压缩指令,会fork一个新的进程去完成重写动作,新进程里的内存数据会被重写,此时旧的aof文件不会被读取使用,类似rdb # 当前AOF文件的大小是上次AOF大小的100% 并且文件体积达到64m,满足两者则触发重写 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb`
使用RDB和AOF結合一起做持久化,RDB做冷備,可以在不同時期對不同版本做恢復,AOF做熱備,保證資料只有1秒的損失。當AOF破損不可用了,那麼再用RDB恢復,這樣就做到了兩者的相互結合,也就是說Redis恢復會先加載AOF,如果AOF有問題會再加載RDB,這樣就達到冷熱備份的目的了。
更多程式相關知識,請造訪:程式設計入門! !
以上是聊聊Redis的持久化機制,到底採用RDB還是AOF呢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。
