持久化的介紹
RDB
#AOF
RDB與AOF的差異
持久化應用場景
對於持久化這個功能點,其實很簡單沒有那麼複雜
持久化過程保存的是什麼呢?
第一種快照形式,儲存資料結果,關注點在數據,也就是下文會講到的RDB
第二種操作過程,儲存操作過程,聚焦在資料的操作過程,也就是下文會講到的AOF
#下圖是redis.conf的設定訊息,執行完save後面會產生一個dump.rdb的檔案
現在我們設定一個值,然後save一下,在/usr/local/redis/data下就會有一個dump6379.rdb的一個檔案
其實這個資料復原相對於其他關係型資料庫復原基本上就不用操作什麼。只需要重新在啟動就好了
當你執行save時,其他客戶端請求redis的指令都會等待,直到save指令執行完成。因為save指令是單執行緒執行,一旦執行時間過長會直接導致其他用戶端無法正常儲存資料。所以這個指令我們預設被廢棄。會使用下文介紹的bgsave來代替
#當在redis執行了bgsave後會直接回傳一個Background saving started
這個時候我們在看一下日誌文件,bgsave指令是針對save阻塞問題做的最佳化
以下配置是默认配置 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檔案中
appendonly yes|no
appendfsync always| everysec | no
#然後使用重新啟動redis服務,就可以在usr/local/redis/data目錄下可以看到appendonly.aof檔案了
然後我們在redis客戶端執行一條指令,在來檢視一下。可以看到資料都會存入appendonly.aof這個檔案。
我們先看一個案例,我們重複設定了name這個key後,打開appendonly.aof檔案查看,可以看到有三個操作,但是這三個操作我們都是修改的一個key啊!我們只保存最後一個key不行嗎?帶著這個疑問,我們繼續往下看
如在上邊我們執行了三次 set name 指令,但是我們最終就只需要最後一次執行的記錄。也就是我們只需要最後一次執行記錄即可。其他的記錄就不需要了,然後會把壓縮後的資料重寫到aof檔案中。
重寫後我們的磁碟使用率就提高了
還有就是我們恢復資料的速度也會變快
同時也會提高持久化的效率
hdel,srem
。還有3-5說的問題,連續對一個key進行操作lpush list a lpush lsit b lpush list c
可以轉換為lpush list a b c
。 #指令:bgrewriteaof
接著我們3-5的問題,我們在命令列執行bgrewriteaof指令然後查看appendonly.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工作流程與重寫流程=流程
######################
以上就是redis持久化的所有內容。
以上是Redis持久化完整版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!