簡單科普一下redis的概念:(會的可忽略)redis
redis基於內存的Key Value類型的NoSQL數據庫.數據庫
補充:緩存
Redis中數據存儲模式有2種:cache-only,persistence安全
對於persistence持久化存儲,Redis提供了兩種持久化方法 bash
注意:除了這兩種方法,Redis在早起的版本還存在虛擬內存的方法,如今已經被廢棄。服務器
redis持久化方式分爲兩種:RDB快照和AOF方式(默認爲RDB模式),當Redis服務器重啓的時候,會自動恢復數據,優先從AOF中恢復,其次才從RDB中恢復app
RDB原理:性能
RDB:快照方式,容許你每隔一段時間對內存數據作一次快照而後存儲到硬盤中。該方式是Redis默認的持久化方式。spa
優勢:使用單獨子進程來進行持久化,主進程不會進行任何IO操做,保證了redis的高性能
缺點:RDB是間隔一段時間進行持久化,若是持久化之間redis發生故障,會發生數據丟失。因此這種方式更適合數據要求不嚴謹的時候操作系統
RDB能夠經過在配置文件中配置時間或者改動鍵的個數來定義快照條件,編輯配置文件redis.conf,找到
save 900 1 #15分鐘以內至少有一個建被更改則進行快照 save 300 10 #5分鐘以內至少有10個建被更改則進行快照 save 60 10000 #1分鐘以內至少有1000個建被更改則進行快照
他們之間是或的關係,RDB持久化到磁盤的文件默認路徑是在當前目錄,文件名爲dump.rdb,你能夠經過配置文件配置dir和dbfilename來指定文件目錄和文件名稱,RDB文件還能夠進行壓縮,你能夠經過配置rdbcompression參數來進行壓縮。
RDB機制的完成流程
1 redis的主進程 fork子進程 完成RDB寫操做
2 redis的主進程對提供服務,子進程會把當前數據庫中的數據,寫入臨時文件
3 當臨時文件寫好以後,覆蓋原有的RDB快照文件
AOF原理(增量式複製 日誌式複製):
AOF方式原理:AOF就能夠作到全程持久化,Redis每執行一個修改數據的命令,都會把這個命令添加到AOF文件中,當Redis重啓時,將會讀取AOF文件進行「重放」以恢復到 Redis關閉前的最後時刻。
注意: 默認redis會使用RDB的方式進行持久化.redis中即便用RDB 又使用AOF ,redis會應用AOF
AOF運行機制
AOF比RDB更加安全,記錄每一次的寫操做.可是若是在寫的過程當中掉電,也會丟失少許數據
AOF:經過將發送到服務器的寫操做命令記錄下來,造成AOF文件,文件默認名稱是appendonly.aof,能夠經過appendfilename來指定文件名稱。你能夠經過配置文件打開AOF功能
appendonly yes
AOF的原理是直接把用戶插入到服務器的命令追加到結尾,那麼文件會原來越大,一些重複的寫命令也會愈來愈多,這時,咱們能夠利用BGREWRITEAOF 命令來重寫AOF,重寫的配置以下:
auto-aof-rewrite-percentage 100 #aof文件大小超過上次重寫時文件大小的百分之幾開始重寫,若是以前沒有寫過,則根據啓動時文件大小。 auto-aof-rewrite-min-size 64mb #限制容許重寫時的最小文件大小。
AOF在同步內存數據到磁盤上時,並非立刻把文件寫如到磁盤中,而是先把文件緩存到系統,而後每隔30秒將文件寫入到磁盤中,咱們能夠在配置文件中配置同步的策略
appendfsync always #每次都同步,保證數據不會丟失,但會慢 appendfsync everysec #每秒同步,系統默認同步策略 appendfsync no #不主動同步,由操做系統決定,快,但數據容易丟失
注意:
Redis持久化的問題:
假定初始Redis使用RDB進行持久化 , 切換AOF進行持久化.問題?
RDB --- bgsave ---- dump.rdb
AOP --- appendonly.aof 獲取數據
熱切換:
改變redis.conf文件 appendonly yes