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干貨。
