如果Redis用作純快取,則可直接禁用AOF和RDB模式,從而關閉不必要的開銷,
一、RDB (RedisDataBase)簡介
意思就是將整個Reids的資料(通過二進制格式),持久化到磁盤里,注意 —— RDB是Redis默認的持久化機制 ,
作業原理:
fork子行程(默認bgwrite模式下是這個,這樣的話就不會阻塞請求了,因為還有主執行緒在作業)進行當前資料的二進制檔案寫入磁盤作業,每次都是對當前所有的資料進行二進制檔案寫入,然后會替換掉之前老的二進制檔案,(這就有個風險,如果不做定時備份的話,那么如果在替換程序中如果宕機了,整個二進制持久化資料就會全部丟失)
優點:
- 直接存盤二進制資料的檔案,大資料場景下恢復速度快
- 整個庫Redis只有一個檔案 —— 如果做了檔案備份方案,比如每天歸檔一次資料,同時歸檔最近30天的資料,那這樣的備份策略就很清晰明了,出現災難性故障也好恢復,(注:可通過寫Shell腳本來定期備份檔案)
- fork子行程,性能最大化
缺點
- 只有一個檔案在不備份的情況下同樣也算是缺點,因為要替換,會造成宕機時檔案的丟失風險
- fork子執行緒,如果資料量巨大,可能導致fork的程序阻塞幾百毫秒到一秒
RDB 配置關注點(Redis.conf檔案):
#
# 持久化資料到磁盤之 —— 頻率,格式如下:
# save 900 1 900秒內至少有1個key被改變(那就會在900秒的時候執行rdb同步)
# save 300 10 300秒內至少有300個key被改變(那就會在900秒的時候執行rdb同步)
# save 60 10000 60秒內至少有10000個key被改變 (那就會在60秒的時候執行rdb同步)
# save "" 如果要禁用RDB模式就把下面這三行注釋掉,并打開 save "" 的注釋
save 900 1
save 300 10
save 60 10000
# 存盤至本地資料庫時(持久化到rdb檔案)是否對這個二進制檔案進行壓縮資料,默認為yes
rdbcompression yes
# RDB后,本地持久化資料庫檔案名,默認值為dump.rdb(持久化的資料都會保存在這個檔案里然后準備刷盤,可自定義檔案名,特別是配置集群的話要改成對應機器的名字,另一個也是好區分)
dbfilename dump.rdb
# 作業目錄
#
# 資料庫鏡像備份的檔案放置的路徑,
# 這里的路徑跟檔案名要分開配置是因為redis在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成時,
# 再把該該臨時檔案替換為上面所指定的檔案,而這里的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中,
#
# AOF檔案也會存放在這個目錄下面
#
# 注意這里必須制定一個目錄而不是檔案
dir ./
再次說明:如果要禁用RDB模式就注釋掉三行持久化頻率,并打開save “” 注釋,如下
save ""
# save 900 1
# save 300 10
# save 60 10000
二、AOF(AppendOnlyFile)簡介
顧名思義,(通過原操作陳述句)追加的方式,增量追加到一個日志檔案里,
作業原理:
根據配置執行原操作陳述句追加(每次寫入都進行追加/每秒追加一次/永不追加),如果追加滿了(默認64M)則會啟動rewrite機制,老的日志會寫入磁盤,與此同時新開一個臨時日志寫新來的陳述句,等老的寫完磁盤后,重新開始到老的寫,
優點:
- 更高的安全性,如果資料被篡改了,還可以更具redis-check-aof工具來幫助資料恢復(這個也是引數設定是否開啟的),
- 資料更完整
- 因為是追加陳述句的形式,所以相對來說宕機風險小
- 另外如果配置的是每次寫入都進行追加使得持久化資料完整
缺點
- 因為保存的是原始操作陳述句,在大資料恢復場景下全部要重新執行一遍,所以相對很慢
- 根據同步策略的不同,開啟AOF后的運行效率也會相對慢于RDB(當然盡管這樣每秒同步策略還是比較高效的)
AOF 配置關注點(Redis.conf檔案):
# AOF開關 —— 設定為yes則開啟,如果AOF開啟則優先使用AOF
appendonly no
# AOF檔案名稱 (默認: "appendonly.aof")
# appendfilename appendonly.aof
# Redis支持三種同步AOF檔案的策略:
#
# no: 不進行同步,系統去操作 . Faster.
# always: always表示每次有寫操作都進行同步. Slow, Safest.
# everysec: 表示對寫操作進行累積,每秒同步一次. Compromise.
#
# 默認是"everysec",按照速度和安全折中這是最好的,
# 如果想讓Redis能更高效的運行,你也可以設定為"no",讓作業系統決定什么時候去執行
# 或者相反想讓資料更安全你也可以設定為"always"
#
# 如果不確定就用 "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
# AOF策略設定為always或者everysec時,后臺處理行程(后臺保存或者AOF日志重寫)會執行大量的I/O操作
# 在某些Linux配置中會阻止過長的fsync()請求,注意現在沒有任何修復,即使fsync在另外一個執行緒進行處理
#
# 為了級訓這個問題,可以設定下面這個引數no-appendfsync-on-rewrite
no-appendfsync-on-rewrite no
# Automatic rewrite of the append only file.
# AOF 自動重寫機制
# 這個機制類似于RDB的二進制壓碩訓制,是用來縮小檔案大小的 —— 比如對相同key的多次操作則只會保存最后一次操作,對多次操作,可以用一條陳述句完成的則改成一條陳述句.... 具體是會新建一個臨時AOF檔案,然后讀取Redis中的資料(不是老的AOF哦),然后進行重寫,寫完后替換老的AOF檔案
#關于主從部分,AOF機制是這樣的,如果從在重寫,主進來了新的追加,那么主會寫自己AOF的同時,再寫一份相同的在快取區,子重寫完后會通知主,那這個時候主會把快取區的再追加到子AOF檔案中
#【重寫的觸發條件】
#1.無rdb、aof的持久化操作
#2.無BGREWRITEAOF進行(手動進行aof重寫操作)
#3.AOF檔案大小超過閾值,默認1M
#4.AOF檔案增長率超過閾值,默認100%
# 設定 percentage 為0就關閉這個特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
🎏 一張關于本文配置細節的機票 —— redis.conf 組態檔詳解
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287907.html
標籤:其他
上一篇:資料庫中常用術語:
