1、概述
Redis的持久化機制有兩種:RDB 和 AOF ,這兩種機制有什麼區別?正式環境應該採用哪種機制?
我們的伺服器記憶體資源是有限的,如果記憶體被Redis的快取佔滿了怎麼辦?這就要看Redis的記憶體管理策略是怎麼配置的了。
今天我們就來聊一下上面提出的這兩個問題。
2、Redis的持久化機制
2.1 RDB
1、什麼是RDB?
RDB 全稱 Redis DataBase,是 Redis 預設的持久化機制。
RDB機制的原理是:每隔一段時間把Redis在記憶體中的資料寫到磁碟,手動停止Redis服務時,也會往磁碟上寫,當Redis再次啟動時,會從磁碟上讀取到資料,恢復到記憶體中。
2、RDB的好處
- 會定時對資料進行全量備份
- 恢復資料簡單,支援遠端傳輸
- 可以保證備份資料的完整性
- 恢復資料速度塊
3、RDB的壞處
- 由於是有時間間隔的備份,因此當服務異常時資料可能會丟失一部分
- 備份時對CPU的負擔較大
4、RDB在配置檔案中的相關配置
1)檔名及檔案儲存路徑的配置
2)設定同步硬碟的時間
save "" 代表不同步到磁碟,資料只在記憶體儲存
save 300 100 代表有100個鍵發生變更,每300秒同步磁碟
3)其他配置
stop-writes-on-bgsave-error yes // 設定為yes,則在寫入磁碟的的過程中出錯,會停止寫操作
rdbcompression yes // 設定為yes,則rdb檔案在寫的過程中會進行壓縮,對CPU有一定損耗
rdbchecksum yes // 設定為yes,會對rdb進行校驗,對效能有一定損耗
2.2 AOF
1、什麼是AOF
AOF 全稱 Append Only File,預設是關閉的。
AOF是以日誌的形式記錄Redis的寫操作,讀操作不會記錄。以追加的方式儲存檔案,恢復時會將日誌檔案中的寫操作重新執行一遍。
2、AOF的好處
- 以秒級進行備份,更能保證資料的完整性
- 如果磁碟滿了,可以執行redis-check-aof工具解決
- 當日志文件太大,會自動進行優化壓縮
- 日誌中的寫操作,可以手動修改,恢復起來更靈活
3、AOF的壞處
- 日誌檔案比RDB檔案大
- 每秒都會與磁碟有IO操作,影響效能
4、AOF在配置檔案中的相關配置
1)開啟AOF,設定檔名
2)設定同步策略
# appendfsync always // 有一條寫操作就同步一次(效能差)
appendfsync everysec // 每秒同步一次(推薦)
# appendfsync no // 不同步
3)重寫策略
auto-aof-rewrite-percentage 100 // AOF檔案是上次大小的100%(建議調小)
auto-aof-rewrite-min-size 64mb // AOF檔案大小達到64MB(建議調大)
以上兩個配置建議修改,根據實際情況調整。
2.3 RDB 、AOF 如何選擇
如果只是把Redis當快取來用,不介意資料的丟失,建議使用RDB方式,如果對資料的完整性比較在意,建議使用AOF方式。
3、Redis的記憶體管理機制
我們的伺服器記憶體資源是有限的,如果記憶體被Redis的快取佔滿了,我們應該如何處理呢?
通過調整配置檔案中的 maxmemory 和 maxmemory-policy
maxmemory 是指定記憶體達到多大時,執行記憶體優化,預設單位是byte
maxmemory-policy 是執行的優化策略:
- noeviction Redis的預設配置,不清理過期的快取,沒有記憶體則返回錯誤
- allkeys-lru 推薦配置,清除最少用的舊快取
4、綜述
今天聊了一下Redis的持久化機制和記憶體管理機制,希望能對大家有所幫助。
希望大家多多評論交流,共同成長。
關注追風人聊Java,每天更新Java乾貨。