首頁 >資料庫 >Redis >Redis持久化完整版本

Redis持久化完整版本

咔咔
咔咔原創
2020-05-27 11:04:391779瀏覽


持久化的介紹

RDB

#AOF

RDB與AOF的差異

持久化應用場景


對於持久化這個功能點,其實很簡單沒有那麼複雜


##示範環境


centos7.0

#redis4.0

redis存放目錄:/usr/local/ redis

redis.conf存放目錄:/usr/local/redis/data


#1. 持久化簡介


redis的所有資料都是保存在記憶體中,redis崩掉資料會遺失。 redis持久化就是把資料保存在磁碟上。利用永久性儲存媒體將資料進程保存,在特定的時間將保存的資料進行復原的工作機制稱為持久化。


持久化過程保存的是什麼呢?


第一種快照形式,儲存資料結果,關注點在數據,也就是下文會講到的RDB


第二種操作過程,儲存操作過程,聚焦在資料的操作過程,也就是下文會講到的AOF


2. RDB


2-1 RDB啟動方式 --  save指令


#下圖是redis.conf的設定訊息,執行完save後面會產生一個dump.rdb的檔案

Redis持久化完整版本

現在我們設定一個值,然後save一下,在/usr/local/redis/data下就會有一個dump6379.rdb的一個檔案

Redis持久化完整版本


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持久化完整版本

#當在redis執行了bgsave後會直接回傳一個Background saving started


這個時候我們在看一下日誌文件,bgsave指令是針對save阻塞問題做的最佳化

Redis持久化完整版本


#2-5 RDB -- 設定檔自啟動


以下配置是默认配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes


Redis持久化完整版本

save  【時間】 【key改變數量】


# #也就是說在300秒有10個key值發生變化了,就會在背景執行bgsave


#3. AOF


##3-1 AOF概念

AOF檔案儲存的是執行指令操作過程,復原資料也是使用操作過程來復原。



3-2 AOF寫入資料過程

Redis持久化完整版本

執行一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


Redis持久化完整版本

#然後使用重新啟動redis服務,就可以在usr/local/redis/data目錄下可以看到appendonly.aof檔案了

Redis持久化完整版本

然後我們在redis客戶端執行一條指令,在來檢視一下。可以看到資料都會存入appendonly.aof這個檔案。

Redis持久化完整版本


3-5 AOF寫入資料出現的問題


我們先看一個案例,我們重複設定了name這個key後,打開appendonly.aof檔案查看,可以看到有三個操作,但是這三個操作我們都是修改的一個key啊!我們只保存最後一個key不行嗎?帶著這個疑問,我們繼續往下看

Redis持久化完整版本


#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檔案


執行完後會發現檔案變小了,檔案裡也就只有一條指令了


#

Redis持久化完整版本


3-9 AOF手動重寫工作原理


Redis持久化完整版本


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  會啟動重寫


此圖來自網路

Redis持久化完整版本

此圖來自網路


Redis持久化完整版本3-11 AOF工作流程與重寫流程=流程

Redis持久化完整版本

######################


4. 總結


以上就是redis持久化的所有內容。

以上是Redis持久化完整版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn