Redis的持久化機制與內存管理機制


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM