標籤:
在某些使用情境中,我們並不需要使用redis的持久化,反而需要發揮redis的記憶體資料庫特性,實現完全記憶體運行,達到需要的高效能。
Redis 本身支援持久化,通過在一定時間間隔或觸發操作,將記憶體中的資料同步到磁碟來保證持久化。Redis 支援兩種持久化方式,一種是 Snapshotting(快照),儲存為dump.rdb檔案,也是預設,另一種是 Append-only file(縮寫aof)的方式,儲存為 .aof 檔案。
Snapshot 快照 通過save或者bgsave命令通知redis做一次快照持久化。save操作是在主線程中儲存快照的,由於redis是用一個主線程來處理所有用戶端的請求,這種方式會阻塞所有用戶端請求。所以不推薦使用。另一點需要注意的是,每次快照持久化都是將記憶體數據完整寫入到磁碟一次,並不是增量的只同步增量資料。如果資料量大的話,寫操作會比較多,必然會引起大量的磁碟IO操作,可能會嚴重影響效能。
在預設的快照 rdb儲存方式中,redis.conf 裡面的配置如下
save 900 1 #900秒內如果超過1 個key 被修改,則發起快照儲存 save 300 10 #300秒內容如超過10個key 被修改,則發起快照儲存 save 60 10000
如果我們需要關閉快照,只需要將這幾行注釋了,然後重啟 redis 即可。
如果是正在啟動並執行執行個體,可以使用 redis-cli的命令
# 查看當前配置config get save# 關閉快照config set save ""
來線上更新配置,輸出OK表示設定成功。
AOF 比快照方式有更好的持久化性,是由於在使用aof 持久化方式時, redis 會將每一個收到的寫
命令都通過write函數追加到檔案中(預設是appendonly.aof) 。當redis 重啟時會通過重新執行檔案中
儲存的寫命令來在記憶體中重建整個資料庫的內容
預設配置如下:
appendonly yes //啟用日誌追加持久化方式#appendfsync always //每次收到寫命令就立即強制寫入磁碟,最慢的,但是保證完全的持久化,不推薦使用appendfsync everysec //每秒鐘強制寫入磁碟一次,在效能和持久化方面做了很好的折中,推薦#appendfsync no //完全依賴作業系統,效能最好,持久化沒保證
我們需要更新設定檔為:
appendfsync no
線上更新配置使用
# 查看當前配置config get appendfsync# 關閉快照config set appendfsync no
通過這兩個配置,redis就可以完全在記憶體運行。
如果想手動進行持久化,可以使用Redis的 bgsave 和 bgrewriteaof 來手動進行持久化。
redis全記憶體運行