redis的所有資料儲存在記憶體中,對資料的更新將非同步的儲存到硬碟上
快照:某時某刻資料的乙個完成備份,-mysql的dump
-redis的rdb
寫日誌:任何操作記錄日誌,要恢復資料,只要把日誌重新走一遍即可
-mysql的 binlog
-hhase的 hlog
-redis的 aof
s**e(同步)
1 客戶端執行s**e命令----》redis服務端----》同步建立rdb二進位制檔案
2會造成redis的阻塞(資料量非常大的時候)
3檔案策略:如果老的rdb存在,會替換老的
4複雜度 o(n)
''''''
bgs**e(非同步,backgroud s**ing started)
1 客戶端執行s**e命令----》redis服務端----》非同步建立rdb二進位制檔案(fork函式生成乙個子程序(fork會阻塞reids),執行createrdb,執行成功,返回給reids訊息)
2此時訪問redis,會正常響應客戶端
3檔案策略:跟s**e相同,如果老的rdb存在,會替換老的
4複雜度 o(n)
''''''
自動(通過配置)
配置 seconds changes
s**e
9001
s**e
30010
s**e
6010000
如果60s中改變了1w條資料,自動生成rdb
如果300s中改變了10條資料,自動生成rdb
如果900s中改變了1條資料,自動生成rdb
以上三條符合任意一條,就自動生成rdb,內部使用bgs**e
'''#配置:
s**e
9001
#配置一條
s**e
30010
#配置一條
s**e
6010000
#配置一條
dbfilename dump.rdb #rdb檔案的名字,預設為dump.rdb
dir ./#rdb檔案存在當前目錄
stop-writes-on-bgs**e-error yes #如果bgs**e出現錯誤,是否停止寫入,預設為yes
rdbcompression yes #採用壓縮格式
rdbchecksum yes #是否對rdb檔案進行校驗和檢驗
#最佳配置
s**e
9001
s**e
30010
s**e
6010000
dbfilename dump-$.rdb #以埠號作為檔名,可能一台機器上很多reids,不會亂
dir /bigdiskpath #儲存路徑放到乙個大硬碟位置目錄
stop-writes-on-bgs**e-error yes #出現錯誤停止
rdbcompression yes #壓縮
rdbchecksum yes #校驗
1耗時,耗效能:全量複製 #沒有執行s**e和bgs**e沒有新增rdb策略,還會生成rdb檔案,如果開啟主從複製,主會自動生成rdb
2debug reload #debug級別的重啟,不會將記憶體中的資料清空
3 shutdown s**e#關閉會出發rdb的生成
不可控,可能會丟失資料
客戶端每寫入一條命令,都記錄一條日誌,放到日誌檔案中,如果出現宕機,可以將資料完全恢復
日誌不是直接寫到硬碟上,而是先放在緩衝區,緩衝區根據一些策略,寫到硬碟上
always:redis–》寫命令重新整理的緩衝區—》每條命令fsync到硬碟—》aof檔案
everysec(預設值):redis——》寫命令重新整理的緩衝區—》每秒把緩衝區fsync到硬碟–》aof檔案
no:redis——》寫命令重新整理的緩衝區—》作業系統決定,緩衝區fsync到硬碟–》aof檔案
隨著命令的逐步寫入,併發量的變大, aof檔案會越來越大,通過aof重寫來解決該問題
本質就是把過期的,無用的,重複的,可以優化的命令,來優化
這樣可以減少磁碟佔用量,加速恢復速度
實現方式
bgrewriteaof:
客戶端向服務端傳送bgrewriteaof命令,服務端會起乙個fork程序,完成aof重寫
aof重寫配置:
自動觸發時機(兩個條件同時滿足):
aof_current_size>auto-aof-rewrite-min-size:當前尺寸大於重寫需要尺寸
(aof_current_size-aof_base_size)/aof_base_size>auto-aof-rewrite-percentage:(增長率)當前尺寸減去上次重寫的尺寸,除以上次重寫的尺寸如果大於配置中的增長率
重寫流程
配置""#檔案儲存的名字
dir /bigdiskpath #存放的路徑
rdb關掉,主從操作時
集中管理:按天,按小時備份資料
主從配置,從節點開啟
開:快取和儲存,大部分情況都開啟,
aof重寫集中管理
everysec:通過每秒重新整理的策略
小分片:每個redis的最大記憶體為4g
快取或儲存:根據特性,使用不通策略
時時監控硬碟,記憶體,負載網路等
有足夠記憶體
Redis系列五 Redis持久化
一 rdb redis database 1 介紹 在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,也就是行話講的snapshot快照,它恢復時是將快照檔案直接讀到記憶體裡。redis會單獨建立 fork 乙個子程序來進行持久化,會先將資料寫入到乙個臨時檔案中,待持久化過程都結束了,再用這個臨時檔...
redis持久化之AOF持久化
aof與rdb持久化通過儲存資料庫中的鍵值對來記錄資料庫狀態不同,aof持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態的。被寫入aof檔案的所有命令都是以redis的命令請求協議格式儲存的。當aof持久化功能處於開啟狀態,伺服器在執行完乙個寫命令之後,會以協議格式將被執行的寫命令追加...
Redis之持久化
aof中記錄的內容如下 其中,3 表示當前命令有三個部分,每部分都是由 數字 開頭,後面緊跟著具體的命令 鍵或值。這裡,數字 表示這部分中的命令 鍵或值一共有多少位元組。例如,3 set 表示這部分有 3 個位元組,也就是 set 命令。重寫機制具有 多變一 功能。所謂的 多變一 也就是說,舊日誌檔...