redis是乙個基於bsd開源許可的記憶體資料結構儲存系統,由於redis具有卓越的高併發讀寫特性,其主要用於用作資料庫、快取和訊息**。redis具有內建的複製、lua、lru、事務和不同級別的磁碟永續性,並通過哨兵機制和集群自動分割槽功能提供高可用性。本文主要介紹包含rdb(redis database)持久化、aof(append only file)持久化、rdb和aof混合持久化等持久化策略。
redis以下幾種永續性選項範圍:
rdb永續性按指定的時間間隔執行資料集的時間點快照。
aof永續性會記錄伺服器接收的每個寫入操作,這些操作將在伺服器啟動時再次**,以重建原始資料集。使用與redis協議本身相同的格式記錄命令,並且採用僅追加方式。當日誌太大時,redis可以在後台重寫日誌。
可以在同一例項中同時合併aof和rdb。在這種情況下,當redis重新啟動時,aof檔案將用於重建原始資料集,因為它可以保證是最完整的。
如果希望只用作快取伺服器,對資料的永續性無要求,也可以完全禁用永續性。
下面著重介紹rdb和aof持久化的特點和應用場景。
rdb 是 redis 預設的持久化方案。在指定的時間間隔內,寫操作達到指定的次數,則會將記憶體中的資料寫入到磁碟rdb檔案中。由於rdb檔案是乙個非常緊湊的檔案,比較容易備份,所以rdb對於災難恢復非常有用。rdb最大限度地提高了redis的效能,因為redis父程序的持久化操作是通過分叉子程序實現,而父程序不會執行磁碟i / o等操作。與aof相比,rdb允許大型資料集更快地重啟。
rdb持久化的寫入方式決定了該持久化策略並不能完全保證資料的安全性。rdb需要經常使用fork()才能使用子程序將其持久化在磁碟上。如果資料集很大,fork()可能很耗時,並且如果資料集很大且cpu效能不佳,則可能導致redis停止為客戶端服務幾毫秒甚至一秒鐘。該過程如果出現宕機,則可能造成資料丟失。
開啟 redis.conf 檔案,定位到 snapshotting 對應內容
s**e
# s**e ""
s**e 900 1
s**e 300 10
s**e 60 10000
dbfilename dump.rdb
dir ./
rdbcompression yes
s**e 指定時間間隔》 執行指定次數更新操作》,滿足條件就將記憶體中的資料同步到硬碟中。官方出廠配置預設是 900秒內有1個更改,300秒內有10個更改以及60秒內有10000個更改,則將記憶體中的資料快照寫入磁碟。關閉rdb,則把上面配置注釋即可。
dbfilename指定本地資料庫檔名,預設檔名為 dump.rdb,檔案格式.rdb結尾。
dir指定資料庫存放目錄為當前目錄
rdbcompression開啟資料壓縮,預設為yes,redis採用lzf壓縮方式。
觸發rdb快照的方式有s**e策略觸發,flush命令(清空資料庫所有資料),shutdown(關閉redis)命令,三種方式都是呼叫redis的bgs**e機制實現快照觸發。
rdb檔案恢復資料的方式是將dump.rdb 檔案拷貝到redis的安裝目錄的bin目錄下,重啟redis服務即可。
aof可以彌補rdb的不足(資料的不一致性),它採用日誌的形式來記錄每個寫操作,並追加到檔案中。redis 重啟的會根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。
使用aof redis更加持久,提供不同的fsync策略:完全沒有fsync,每秒fsync,每個查詢fsync。使用預設策略fsync時,每秒的寫入效能仍然很好(fsync是使用後台執行緒執行的,並且在沒有進行fsync的情況下,主線程將盡力執行寫入操作。)
aof日誌是僅追加的日誌,因此即便是斷電故障,也不會出現磁碟尋道或損壞問題。即使由於某種原因(磁碟已滿或其他)導致日誌錯誤,也可以使用redis-check-aof工具=輕鬆修復。
對於同一資料集,aof檔案通常大於等效的rdb檔案。在特定的fsync策略下,aof比rdb的效率低。通常,在將fsync設定為每秒的情況下,效能仍然很高,並且在禁用fsync的情況下,即使在高負載下,它也應與rdb一樣快。即使在巨大的寫負載的情況下,rdb仍然能夠提供有關最大延遲的更多保證。但是如果fsync策略為aways,則隨著集群負載增大,aof記錄的內容越來越大多,檔案會越來越大,資料恢復也會越來越慢。
開啟 redis.conf 檔案,定位到append only mode 對應內容
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
說明:appendonly 配置redis 預設關閉,開啟需要手動把no改為yes
appendfilename指定本地資料庫檔名,預設值為 appendonly.aof
appendfsync everysec指定更新日誌條件為每秒更新,共三種策略(aways,everyse,no)
auto-aof-rewrite-min-size配置重寫觸發機制,當aof檔案大小是上次rewrite後大小的一倍且檔案大於64m時觸發。
aof主要根據配置檔案策略觸發,可以是每次執行觸發,可以是每秒觸發,可以不同步。
aof的恢復主要是將appendonly.aof 檔案拷貝到redis的安裝目錄的bin目錄下,重啟redis服務即可。但在實際開發中,可能因為某些原因導致appendonly.aof 檔案異常,從而導致資料還原失敗,可以通過命令redis-check-aof --fix appendonly.aof 進行修復
aof的工作原理是將寫操作追加到檔案中,檔案的冗餘內容會越來越多。所以redis 新增了重寫機制,通過auto-aof-rewrite-min-size控制。當aof檔案的大小超過所設定的閾值時,redis就會對aof檔案的內容壓縮。
作者:張文博
4大步驟節省30%浪費,優化企業上雲成本從了解雲開始!
運維思考 | 你知道cmdb與監控是什麼關係嗎?
【乾貨】4種oracle dbaas部署模式,你在使用哪一種?
如何改善監控問題,試試打造企業統一監控平台體系!
雲計算 | 資料在雲上安全嗎?ddos***怎麼辦?
Redis持久化方式介紹
1,redis持久化 提供了兩種不同的持久化方式 一種是rdb,另一種是aof。rdb持久化可以在指定的時間間隔內生成資料集的時間點快照 aof持久化記錄伺服器執行的所有寫操作命令,並在伺服器啟動時,通過重新執行這些命令來還原資料集。redis還可以同時使用aof和rdb持久化,在這種情況下,當re...
Redis 持久化 RDB,AOF介紹
目錄 一.什麼是持久化 二.rdb 1.1 優點 1.2 缺點 2.1 優點 2.2 缺點 四.持久化選擇策略 持久化就是將記憶體中的資料定時的儲存到磁碟中的過程。持久化是redis高可用中比較重要的乙個環節,因為redis資料在記憶體的特性,持久化必須得有,不然伺服器死機會導致資料全丟。兩種方式都...
redis持久化 AOF持久化
1.aof持久化原理 aof持久化會將被執行的寫命令寫到aof檔案的末尾。在恢復的時候,redis只要從頭到尾重新執行一次aof檔案包含的所有寫命令 2.配置選項 固態硬碟禁用always選項,在某些情況頻繁讀寫會大大降低固態硬碟的壽命 4.aof檔案的重寫和壓縮 aof檔案裡面記錄了所有的命令而不...