一文帶你了解Redis持久化完整版本

      網友投稿 920 2022-05-28

      本文講解知識點

      持久化的簡介

      RDB

      AOF

      RDB與AOF的區別

      持久化應用場景

      對于持久化這個功能點,其實很簡單沒有那么復雜

      Redis持久化

      演示環境

      1. 持久化簡介

      2. RDB

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

      2-2 RDB啟動方式 -- save指令相關配置

      2-3 RDB數據恢復

      2-4 RDB -- save指令工作原理

      2-5 RDB -- bgsave指令工作原理

      2-5 RDB -- 配置文件自啟動

      3. AOF

      3-1 AOF概念

      3-2 AOF寫數據過程

      3-3 AOF寫數據的三種策略

      3-4 AOF功能開啟

      3-5 AOF寫數據出現的問題

      3-6 AOF重寫

      3-7 AOF重寫作用

      3-8 AOF重寫規則

      3-9 AOF手動重寫

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

      3-11 AOF自動重寫

      3-11 AOF工作流程和重寫流=流程

      4. 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的文件

      現在我們設置一個值,然后save一下,在/usr/local/redis/data下就會有一個dump6379.rdb的一個文件

      2-2 RDB啟動方式 – save指令相關配置

      dbfilename dump6379.rdb :設置本地數據庫文件名,默認值為dump.rdb

      dir:存儲rdb文件的路徑

      rdbcompression yes :設置存儲至本地數據庫時是否壓縮數據,默認為yes,采用lzf壓縮

      rdbchecksum yes:設置是否進程RDB文件格式校驗,該校驗過程在寫文件和讀文件過程均進行

      2-3 RDB數據恢復

      其實這個數據恢復相對于其他關系型數據庫恢復基本就不用操作什么。只需要重新在啟動就好了

      2-4 RDB – save指令工作原理

      此圖來源于網絡視頻。

      save指令的執行會阻塞當前redis服務器,直到當前RDB過程完為止,有可能會造成長時間的阻塞。這個指令在工作過程中基本以被廢棄不在使用。會以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

      1

      2

      3

      4

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

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

      3. AOF

      3-1 AOF概念

      AOF持久化:以獨立日志的方式記錄每次寫命令,重啟時在重新執行AOF文件中命令達到數據恢復的目的。與RDB相比可以簡單描述為記錄數據產生的過程

      AOF的主要作用是解決了數據持久化的實時性,目前已經是redis持久化的主流方式

      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

      然后使用重啟redis服務,就可以在usr/local/redis/data目錄下可以看到appendonly.aof文件了

      然后我們在redis客戶端執行一條命令,在來查看一下。可以看到數據都會存入appendonly.aof這個文件中。

      3-5 AOF寫數據出現的問題

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

      3-6 AOF重寫

      隨著命令不斷寫入AOF,文件會越來越大,為了解決這個問題,redis引入了AOF重寫機制壓縮文件體積。AOF文件重寫是將redis進程內的數據轉化為寫命令同步到新AOF文件的過程。簡單說就是將對同一個數據的若干條命令執行結果轉化為最終結果數據對應指令的執行記錄。

      如在上邊我們執行了三次 set name 指令,但是我們最終就只需要最后一次執行的數據。也就是我們只需要最后一次執行記錄即可。

      3-7 AOF重寫作用

      降低磁盤占用量,提高磁盤利用率

      提高持久化效率,降低持久化寫時間,提高IO性能

      降低數據恢復用時,提高數據恢復效率

      3-8 AOF重寫規則

      進程內已超時的數據不再寫入文件

      忽略無效指令,重寫時使用進程內數據直接生成,這樣新的AOF文件值保留最終數據的寫入命令。如del指令,hdel,srem。 多次設置一個key值等

      對同一數據的多條寫入命令合并為一條命令:如lpush list a lpush lsit b lpush list c可以轉化為lpush list a b c。但是為了防止數據量過大造成客戶端緩沖區溢出,對list,set,hash,zset類型每條指令最多寫入64個元素

      3-9 AOF手動重寫

      指令:bgrewriteaof

      接著我們3-5的問題,我們在命令行執行bgrewriteaof指令然后查看appendonly.aof文件

      一文帶你了解Redis持久化完整版本

      當執行完后會發現文件變小了,文件里也就只有一條指令了

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

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

      此圖來源于網絡

      3-11 AOF工作流程和重寫流=流程

      4. RDB和AOF區別

      對數據非常敏感,建議使用默認的AOF持久化方案

      AOF持久化策略使用everysecond, 每 秒 鐘fsync-次?該策略redis仍可以保持很好的處理性能,當出現問題時, 最 多丟失0-1秒內的數據.

      注意:由于AO文件存儲體積較大,且恢復速度較慢

      數據呈現階段有效性,建議使用RDB持久化方案

      數據可以良好的做到階段內無丟失(該階段是開發者成運維人手工維護的),且恢復速度較快,階段點數據恢復通常采用RDB方案

      注 意 : 利 用RDB實現緊促的數據持久化會使Redis降的很低

      綜合對比

      RDB與AOF的選擇實際上是在做一種權衡,每種都有利有弊

      如不能承受數分鐘以內的數據丟失,對業努數據非常敏感,選用A0F

      如能承受數分鐘以內的數據丟失,旦追求大數據集的恢復速度,選用RDB

      災難恢復使用RDB

      雙保險策略,同時幵啟RDB和AOF, 重啟后,Redis優先使用A0F來恢復數據,降低丟失數據的量

      Redis 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:win10安裝TensorRT
      下一篇:CodeIgniter啟用緩存和清除緩存的方法
      相關文章
      偷自拍亚洲视频在线观看99| 国产成人+综合亚洲+天堂| 亚洲欧洲日产国码高潮αv| 亚洲爆乳AAA无码专区| 亚洲国产成人无码AV在线 | 亚洲一级毛片免费看| 亚洲白色白色永久观看| 亚洲伊人tv综合网色| 精品日韩亚洲AV无码| 亚洲色偷偷av男人的天堂| 亚洲日本精品一区二区| 亚洲午夜精品一区二区| 亚洲欧洲日韩不卡| 中文字幕在线观看亚洲| 亚洲日本国产乱码va在线观看| 亚洲日韩乱码久久久久久| 亚洲国产精品久久丫| 亚洲成a人片在线观看中文app| 亚洲理论片在线中文字幕| 亚洲国产成人精品久久| 亚洲自国产拍揄拍| 亚洲日韩中文字幕一区| 久久久久亚洲AV无码去区首| 日批日出水久久亚洲精品tv| 亚洲欧洲国产成人综合在线观看 | 亚洲欧洲精品国产区| 亚洲中字慕日产2020| 亚洲国产乱码最新视频| 亚洲乱色熟女一区二区三区蜜臀| 人人狠狠综合久久亚洲| 亚洲成?Ⅴ人在线观看无码| 国产亚洲精品精品国产亚洲综合| 亚洲色婷婷六月亚洲婷婷6月| 亚洲成色WWW久久网站| 亚洲天堂一区二区| 亚洲AV成人无码天堂| 亚洲国产成人综合精品| 亚洲精品无码专区久久同性男| 亚洲熟妇中文字幕五十中出| 亚洲国产一区二区三区青草影视| 亚洲女人初试黑人巨高清|