Redis的持久化機制與內(nèi)存管理機制

1、概述

Redis的持久化機制有兩種:RDB 和 AOF ,這兩種機制有什么區(qū)別?正式環(huán)境應該采用哪種機制?

我們的服務器內(nèi)存資源是有限的,如果內(nèi)存被Redis的緩存占滿了怎么辦?這就要看Redis的內(nèi)存管理策略是怎么配置的了。

今天我們就來聊一下上面提出的這兩個問題。

2、Redis的持久化機制

2.1 RDB

1、什么是RDB?

RDB 全稱 Redis DataBase,是 Redis 默認的持久化機制。

RDB機制的原理是:每隔一段時間把Redis在內(nèi)存中的數(shù)據(jù)寫到磁盤,手動停止Redis服務時,也會往磁盤上寫,當Redis再次啟動時,會從磁盤上讀取到數(shù)據(jù),恢復到內(nèi)存中。

2、RDB的好處

  • 會定時對數(shù)據(jù)進行全量備份
  • 恢復數(shù)據(jù)簡單,支持遠程傳輸
  • 可以保證備份數(shù)據(jù)的完整性
  • 恢復數(shù)據(jù)速度塊

3、RDB的壞處

  • 由于是有時間間隔的備份,因此當服務異常時數(shù)據(jù)可能會丟失一部分
  • 備份時對CPU的負擔較大

4、RDB在配置文件中的相關配置

1)文件名及文件保存路徑的配置

image

2)設置同步硬盤的時間

save "" 代表不同步到磁盤,數(shù)據(jù)只在內(nèi)存存儲

save 300 100 代表有100個鍵發(fā)生變更,每300秒同步磁盤

image

3)其他配置

stop-writes-on-bgsave-error yes // 設置為yes,則在寫入磁盤的的過程中出錯,會停止寫操作

rdbcompression yes // 設置為yes,則rdb文件在寫的過程中會進行壓縮,對CPU有一定損耗

rdbchecksum yes // 設置為yes,會對rdb進行校驗,對性能有一定損耗

image

2.2 AOF

1、什么是AOF

AOF 全稱 Append Only File,默認是關閉的。

AOF是以日志的形式記錄Redis的寫操作,讀操作不會記錄。以追加的方式存儲文件,恢復時會將日志文件中的寫操作重新執(zhí)行一遍。

2、AOF的好處

  • 以秒級進行備份,更能保證數(shù)據(jù)的完整性
  • 如果磁盤滿了,可以執(zhí)行redis-check-aof工具解決
  • 當日志文件太大,會自動進行優(yōu)化壓縮
  • 日志中的寫操作,可以手動修改,恢復起來更靈活

3、AOF的壞處

  • 日志文件比RDB文件大
  • 每秒都會與磁盤有IO操作,影響性能

4、AOF在配置文件中的相關配置

1)開啟AOF,設置文件名

image

2)設置同步策略

# appendfsync always // 有一條寫操作就同步一次(性能差)
appendfsync everysec // 每秒同步一次(推薦)
# appendfsync no // 不同步

image

3)重寫策略

auto-aof-rewrite-percentage 100 // AOF文件是上次大小的100%(建議調(diào)小)
auto-aof-rewrite-min-size 64mb // AOF文件大小達到64MB(建議調(diào)大)

以上兩個配置建議修改,根據(jù)實際情況調(diào)整。

image

2.3 RDB 、AOF 如何選擇

如果只是把Redis當緩存來用,不介意數(shù)據(jù)的丟失,建議使用RDB方式,如果對數(shù)據(jù)的完整性比較在意,建議使用AOF方式。

3、Redis的內(nèi)存管理機制

我們的服務器內(nèi)存資源是有限的,如果內(nèi)存被Redis的緩存占滿了,我們應該如何處理呢?

通過調(diào)整配置文件中的 maxmemory 和 maxmemory-policy

maxmemory 是指定內(nèi)存達到多大時,執(zhí)行內(nèi)存優(yōu)化,默認單位是byte

maxmemory-policy 是執(zhí)行的優(yōu)化策略:

  • noeviction  Redis的默認配置,不清理過期的緩存,沒有內(nèi)存則返回錯誤
  • allkeys-lru  推薦配置,清除最少用的舊緩存
image

4、綜述

今天聊了一下Redis的持久化機制和內(nèi)存管理機制,希望能對大家有所幫助。

希望大家多多評論交流,共同成長。

關注追風人聊Java,每天更新Java干貨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容