Redis學習(五):Redis的持久化

簡介

由於redis是一個內存數據庫,所有的數據都是保存在內存當中的,內存當中的數據極易丟失,所以redis的數據持久化就顯得尤爲重要,在redis當中,提供了兩種數據持久化的方式,分別爲RDB以及AOF,且redis默認開啓的數據持久化方式爲RDB方式。

什麼是持久化?
將redis內存的數據存儲到硬盤中。用於數據的永久存儲,防止數據丟失

方案一:RDB方案

Redis會定期保存數據快照至一個rbd文件中,並在啓動時自動加載rdb文件,恢復之前保存的數據。可以在配置文件中配置Redis進行快照保存的時機:
save [seconds] [changes]
意爲在[seconds]秒內如果發生了[changes]次數據修改,則進行一次RDB快照保存。
RDB方案配置如下
1、在redis.conf 配置文件中添加一個:“save 5 1”(表示5秒發生1次操作便實行一次數據持久化)
2、進入redis客戶端,設置一個值,等待5秒退出
3、ps -ef | grep redis :查看redis進程號,並使用:kill -9 進程號,將redis進程殺死
4、重新啓動,並登陸客戶端,查看(若數據 在表示持久化成功,若數據不在,表示持久化失敗)
修改位置:redis下的redis.conf文件,搜索:“save”,出現以下界面進行修改
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
此方式配置 save,時間、次數、在企業中很難掌握,所以一般在企業中不推薦
手動觸發持久化
SAVE或者BGSAVE命令手動觸發RDB快照保存。SAVE 和 BGSAVE 兩個命令都會調用 rdbSave 函數,但它們調用的方式各有不同:

  • SAVE 在數據持久化時,會阻塞 redis 讀寫任務,此時客戶端無法執行讀寫
  • BGSAVE 在數據持久化時,不會阻塞 redis 讀寫任務,此時客戶端可以正常執行讀寫。

RDB方案優點

  • 對性能影響最小。Redis在保存RDB快照時會fork出進程進行,幾乎不影響Redis處理客戶端請求的效率。
  • 每次快照會生成一個完整的數據快照文件,所以可以輔以其他手段保存多個時間點的快照(例如把每天0點的快照備份至其他存儲媒介中),作爲非常可靠的災難恢復手段
  • 使用RDB文件進行數據恢復比AOF要快很多

RDB方案缺點

  • 快照時定期生成的,所以在Redis crash(崩潰)時或多或少會丟失一部分數據
  • 如果數據集非常大且CPU不夠強(比如單核CPU),Redis在fork子進程時可能會消耗 相對較長的時間,影響Redis對外提供服務的能力。

方案二:AOF方案

採用AOF持久方式時,Redis會把每一個寫請求都記錄在一個日誌文件裏。在Redis重啓時讀取日誌文件,進行還原,將數據還原到內存。

AOF提供了三個 fsync(數據同步) 配置,always/everysec/no,通過配置項[appendfsync]指定:

  • appendfsync no:不進行fsync,將flush(刷新)文件的時機交給OS(操作系統),決定,速度最快
  • appendfsync always:每寫入一條日誌就進行一次fsync操作,數據安全性最高,但速度最慢
  • appendfsync everysec:這種的做法,每秒記錄一次,最多丟失一秒鐘的數據。

隨着AOF不斷地記錄寫操作日誌,因爲所有的操作都會記錄,所以必定會出現一些無用的日誌。大量無用的日誌會讓AOF文件過大,也會讓數據恢復的時間過長。不過Redis提供了AOF rewrite功能,可以重寫AOF文件,只保留能夠把數據恢復到最新狀態的最小寫操作集。
AOF rewrite可以通過BGREWRITEAOF命令觸發,也可以配置Redis定期自動進行:
auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

上面兩行配置的含義是,Redis在每次AOF rewrite時,會記錄完成rewrite後的AOF日誌大小,當AOF日誌大小在該基礎上增長了100%後,自動進行AOF rewrite。同時如果增長的大小沒有達到64mb,則不會進行rewrite。

AOF優點

  • 最安全,在啓用 appendfsync always 時,任何已經寫入的數據都不會丟失,使用在啓用 appendfsync everysec 也至多隻會丟失1秒的數據。
  • AOF文件在發生斷電等問題時也不會損壞,即使出現了某條日誌只寫入了一半的情況,也可以使用 redis-check-aof 工具輕鬆修復。
  • AOF文件易讀,可修改,在進行了某些錯誤的數據清除操作後,只要AOF文件沒有rewrite,就可以把AOF文件備份出來,把錯誤的命令刪除,然後恢復數據。

AOF缺點

  • AOF文件通常比RDB文件更大
  • 性能消耗比RDB更高
  • 數據恢復比RDB慢

AOF方案配置

cd /export/servers/redis-3.2.8

vim redis.conf
appendonly yes
# appendfsync always
appendfsync everysec
# appendfsync no

Redis 數據擊穿-數據雪崩

在這裏插入圖片描述
數據擊穿

指的是用戶到redis彙總獲取數據,但redis中沒有數據,用戶只能到底層的數據庫中查找。

數據雪崩

指的是redis由於硬件或軟件的各種原因導致的redis內的數據全部消失。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章