6 Redis系列之 持久化

2022-10-08 17:24:18 字數 3082 閱讀 3208

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 命令。重寫機制具有 多變一 功能。所謂的 多變一 也就是說,舊日誌檔...