Redis持久化完整版本
持久化的介紹
RDB
#AOF
RDB與AOF的差異
持久化應用場景
對於持久化這個功能點,其實很簡單沒有那麼複雜
持久化過程保存的是什麼呢?
第一種快照形式,儲存資料結果,關注點在數據,也就是下文會講到的RDB
第二種操作過程,儲存操作過程,聚焦在資料的操作過程,也就是下文會講到的AOF
2. RDB
2-1 RDB啟動方式 -- save指令
#下圖是redis.conf的設定訊息,執行完save後面會產生一個dump.rdb的檔案
現在我們設定一個值,然後save一下,在/usr/local/redis/data下就會有一個dump6379.rdb的一個檔案
2-2 RDB使用方式之save
- dbfilename dump6379.rdb :設定RDB檔名,預設值為dump.rdb
- dir:儲存rdb或aof檔案的路徑
- rdbcompression yes :設定儲存時是否壓縮數據,預設為yes,採用lzf壓縮
- rdbchecksum yes:設定是否進行RDB檔案格式校驗,該校驗過程在寫入檔案和讀取檔案過程中都進行
2-3 RDB資料復原
其實這個資料復原相對於其他關係型資料庫復原基本上就不用操作什麼。只需要重新在啟動就好了
2-4 RDB -- save指令工作原理
當你執行save時,其他客戶端請求redis的指令都會等待,直到save指令執行完成。因為save指令是單執行緒執行,一旦執行時間過長會直接導致其他用戶端無法正常儲存資料。所以這個指令我們預設被廢棄。會使用下文介紹的bgsave來代替
2-5 RDB -- bgsave指令工作原理
#當在redis執行了bgsave後會直接回傳一個Background saving started
這個時候我們在看一下日誌文件,bgsave指令是針對save阻塞問題做的最佳化
#2-5 RDB -- 設定檔自啟動
以下配置是默认配置 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes
save 【時間】 【key改變數量】
##3-1 AOF概念
3-2 AOF寫入資料過程
執行一redis指令
#redis的AOF會把指令刷新緩衝區
然後根據一定的方式同步的到redis.conf配置的.aof檔案中
3-3 AOF寫資料的三種策略
- always:執行的指令都會儲存到AOF檔中,資料零誤差,效能較低,不建議使用
- everysec:每秒將緩衝區中的指令同步到AOF檔案中,資料準確度較高,效能較高,建議使用,也是預設配置。但在系統突然宕機的情況下回遺失1秒內的資料
- no:由作業系統控制每次同步到AOF檔的週期,整體過程不可控
#3-4 AOF功能開啟
- 設定:
appendonly yes|no
- 作用:是否開啟AOF持久化功能,預設為不開啟狀態
- 設定:
appendfsync always| everysec | no
- 作用:AOF寫入資料策略
- 設定:appenfilename filename ##作用:AOF持久化檔名,預設為appendonly.aof
3-5 AOF寫入資料出現的問題
我們先看一個案例,我們重複設定了name這個key後,打開appendonly.aof檔案查看,可以看到有三個操作,但是這三個操作我們都是修改的一個key啊!我們只保存最後一個key不行嗎?帶著這個疑問,我們繼續往下看
#3-6 AOF重寫
如在上邊我們執行了三次 set name 指令,但是我們最終就只需要最後一次執行的記錄。也就是我們只需要最後一次執行記錄即可。其他的記錄就不需要了,然後會把壓縮後的資料重寫到aof檔案中。
重寫後我們的磁碟使用率就提高了
還有就是我們恢復資料的速度也會變快
同時也會提高持久化的效率
3-7 AOF重寫規則
- 進程內已逾時的資料不再寫入檔案
- 忽略刪除指令,如del,
hdel,srem
。還有3-5說的問題,連續對一個key進行操作 - 對同一資料的多個寫入記錄合併為一筆記錄:如
lpush list a lpush lsit b lpush list c
可以轉換為lpush list a b c
。
3-8 AOF手動重寫
#指令:bgrewriteaof
接著我們3-5的問題,我們在命令列執行bgrewriteaof指令然後查看appendonly.aof檔案
執行完後會發現檔案變小了,檔案裡也就只有一條指令了
3-9 AOF手動重寫工作原理
3-10 AOF自動重寫
設定:auto-aof-rewrite-percentage 100 | auto-aof-rewrite-min-size 64mb
觸發對比參數:aof_current_size | aof_base_size
當aof_current_size > auto-aof-rewrite-min-size 64mb > auto-aof-rewrite-min-size 64mb 會啟動重寫
此圖來自網路
此圖來自網路
3-11 AOF工作流程與重寫流程=流程
4. 總結
以上就是redis持久化的所有內容。
以上是Redis持久化完整版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信
