redis的持久化有rdb和aof兩種。
rdb是記錄一段時間內的操作,一盤的配置是一段時間內操作超過多少次就持久化。
aof可以實現每次操作都持久化。
這里我們使用aof。
配置方式,打開redis的配置文件。找到appendonly。默認是appendonly no。改成appendonly yes。
再找到appendfsync
默認是:
# appendfsync always #每次收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用
appendfsync everysec #每秒鍾強制寫入磁盤一次,在性能和持久化方面做了很好的折中,推薦
# appendfsync no #完全依賴os,性能最好,持久化沒保證
默認每秒持久化滿足我的需求。
其實改下appendonly 就ok了。
appendfsync no的時候,Redis不會主動調用fsync,將緩沖區中的數據寫到磁盤上。
appendfsync everysec
當設置appendfsync為everysec的時候,Redis會默認每隔一秒進行一次fsync調用時長超過1秒時。Redis會采取延遲fsync,這一次的fsync時文件描述符會被阻塞,所以當前的寫操作就會阻塞。
結論就是,在絕大多數情況下,Redis會每隔一秒進行一 次fsync操作。這一操作在大多數數據庫系統中被稱為group commit,就是組合多次寫操作的數據,一次性將日志寫到磁盤。
appendfsync always
置appendfsync為always時,每一次寫操作都會調用一次fsync,
所以其性能也會受到影響。