redis緩存持久化 2018-01-17

redis持久化

可參照:

http://blog.csdn.net/jackpk/article/details/30073097
http://blog.csdn.net/canot/article/details/52886923

redis的持久化分爲兩種:

  1. RDB(redis database)
    • 將緩存放到一個文件中,默認一段時間去存儲一次
    • 會將內容先放到緩存文件,持久化結束之後,就用緩存文件代替上一次的持久化文件
    • 優點:會調用子進程來保持持久化,不會有數據庫I/O
    • 缺點:如果持久化的時候數據庫丟失了數據,因爲是’覆蓋的‘所以,就找不到數據了,故適用於不太重要的數據
    • 總結:rdb文件小,易備份,易恢復,恢復快
  2. AOF(append only file)
    • 默認每秒去存儲歷史命令
    • 保存的是數據的歷史指令,恢復數據的時候是將命令從前到後在執行一遍
    • 優點:遇突發情況的話能找到以前的記錄,且數據丟失較少(1s)
    • 缺點:每次都有IO操作,對服務器壓力較大
    • 總結:回覆慢,數據完整性好,不易備份

第一種:RDB

  1. 配置緩存項:

    位於redis.conf中: dir /usr/local/var/db/redis/
    系統會自動在當前位置建立一個名爲dump.rdb的文件,每次redis-server啓動的時候就會自動從這個文件上讀取緩存,而且有默認的緩存時間

    dir /usr/local/var/db/redis/
    save 900 1
    save 300 10
    save 60 10000

    意思就是900s內有一個請求的話會保存,300s內有10個修改項的時候會保存,60s內有10000個修改項的話會保存,經過測試:貌似每次關閉redis-server的時候都會自動保存。

  2. 配置redis日誌:

    在redis.conf的logfile 後面配置,默認是沒有的,需要手動配置,配置之後會有操作日誌

    logfile /usr/local/db/redis.log
  3. 使用:

    可以通過客戶端來手動保存redis緩存

    redis-cli -h 127.0.0.1 -p 5432 save

    我們可以定期保存dump.rdb文件,以防數據誤操作,可以在dir的位置放上我們想要的緩存文件,redis服務啓動的時候就會自動讀取了。

第二種:AOF

  1. redis配置

    默認是關閉的,可以通過redis.conf:appendonly yes 開啓

    appendfilename 設置aof備份文件名,默認爲:appendonly.aof

    appendsync everysec 配置同步的時間(還有always立即同步,no:根據系統同步,一般選擇everysec)

  2. 使用方法

    手動保存

    redis-cli -h ip -p port bgrewriteaof

    如果因爲誤刪如:flushall, 而把數據庫的緩存信息全部刪除了,想要恢復的話也很簡單,找到 appendonly.aof 文件,把最下面的那行命令:flushall 刪除,然後重啓服務即可。

    注意:有時候我們的服務器突然停止運行,會導致數據庫:

    • 寫入的命令丟失

      這時候最多隻丟失一秒的命令數據,因爲前面設置了everysec

    • 也可能導致:服務器寫入appendonly.aof的命令語句不全,系統有redis-check-aof可以輕鬆的修復一些常見錯誤引發的語句問題,我們也可以打開appendonly.aof文件,手動修改,因爲是非常易讀的。

3.從rdb轉到aof存儲的注意點:

如果你一直用的是rdb持久化,想要轉到aof持久化需要注意:

  1. 第一步:

    修改redis.conf文件的: no-appendfsync-rewrite yes(默認是no)

  2. 第二步:

    重啓redis-server(可以kill,再重啓)
    遷移:redis-cli -h 127.0.0.1 -p 6379 bgrewriteaof

  3. 第三步:

    修改 redis.conf 的:appendonly yes(默認no)

    然後重啓redis服務,就會遷移過去了

4.使用redis-check-aof工具:

redis-check-aof --fix ./appendonly.aof

這是aof文件損壞的時候用這個命令補全,但是爲什麼我的補全會丟失以前的記錄???
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章