redis持久化
可參照:
http://blog.csdn.net/jackpk/article/details/30073097
http://blog.csdn.net/canot/article/details/52886923
redis的持久化分爲兩種:
- RDB(redis database)
- 將緩存放到一個文件中,默認一段時間去存儲一次
- 會將內容先放到緩存文件,持久化結束之後,就用緩存文件代替上一次的持久化文件
- 優點:會調用子進程來保持持久化,不會有數據庫I/O
- 缺點:如果持久化的時候數據庫丟失了數據,因爲是’覆蓋的‘所以,就找不到數據了,故適用於不太重要的數據
- 總結:rdb文件小,易備份,易恢復,恢復快
- AOF(append only file)
- 默認每秒去存儲歷史命令
- 保存的是數據的歷史指令,恢復數據的時候是將命令從前到後在執行一遍
- 優點:遇突發情況的話能找到以前的記錄,且數據丟失較少(1s)
- 缺點:每次都有IO操作,對服務器壓力較大
- 總結:回覆慢,數據完整性好,不易備份
第一種:RDB
配置緩存項:
位於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的時候都會自動保存。
配置redis日誌:
在redis.conf的logfile 後面配置,默認是沒有的,需要手動配置,配置之後會有操作日誌
logfile /usr/local/db/redis.log
使用:
可以通過客戶端來手動保存redis緩存
redis-cli -h 127.0.0.1 -p 5432 save
我們可以定期保存dump.rdb文件,以防數據誤操作,可以在dir的位置放上我們想要的緩存文件,redis服務啓動的時候就會自動讀取了。
第二種:AOF
redis配置
默認是關閉的,可以通過redis.conf:appendonly yes 開啓
appendfilename 設置aof備份文件名,默認爲:appendonly.aof
appendsync everysec 配置同步的時間(還有always立即同步,no:根據系統同步,一般選擇everysec)
使用方法
手動保存
redis-cli -h ip -p port bgrewriteaof
如果因爲誤刪如:flushall, 而把數據庫的緩存信息全部刪除了,想要恢復的話也很簡單,找到 appendonly.aof 文件,把最下面的那行命令:flushall 刪除,然後重啓服務即可。
注意:有時候我們的服務器突然停止運行,會導致數據庫:
寫入的命令丟失
這時候最多隻丟失一秒的命令數據,因爲前面設置了everysec
- 也可能導致:服務器寫入appendonly.aof的命令語句不全,系統有redis-check-aof可以輕鬆的修復一些常見錯誤引發的語句問題,我們也可以打開appendonly.aof文件,手動修改,因爲是非常易讀的。
3.從rdb轉到aof存儲的注意點:
如果你一直用的是rdb持久化,想要轉到aof持久化需要注意:
第一步:
修改redis.conf文件的: no-appendfsync-rewrite yes(默認是no)
第二步:
重啓redis-server(可以kill,再重啓)
遷移:redis-cli -h 127.0.0.1 -p 6379 bgrewriteaof第三步:
修改 redis.conf 的:appendonly yes(默認no)
然後重啓redis服務,就會遷移過去了
4.使用redis-check-aof工具:
redis-check-aof --fix ./appendonly.aof
這是aof文件損壞的時候用這個命令補全,但是爲什麼我的補全會丟失以前的記錄???