????????最近生產環境緩存數據庫數據過大(如何搭建單服務redis緩存數據庫?以及可視化工具Another Redis Desktop Manager使用),導致在對數據庫做rdb快照備份時消耗內存過大,緩存數據庫宕機一小時。基礎運維通過增加虛擬機內存暫時解決問題,但隨著垃圾數據的持續增長,終有一刻內存資源會耗盡,宕機問題重現。現在產品經理要求對緩存數據庫進行降容。我針對這個問題提出了四個解決方案,最后一個方案解決問題。
????????首先使用redis rdb tools 工具(redis rdb tools工具如何搭建?)對當前快照文件redis.rdb 進行分析,將緩存數據庫中無用數據清除掉。在使用工具命令進行處理時報錯:
? ? ? ? ? Invalid RDB version number 10 ????//提示目標rdb文件版本過高,無法進行分析
? ? ?上述報錯的原因是:當前緩存使用的7版本,而7版本目前redis rdb tools對高版本的rdb文件分析的功能還沒有上線,也就是說當前功能不兼容。
????????緊接著上第二個方案,使用redis數據備份工具redis-dump將緩存數據備份成json文件,再將該json文件中的數據遷移到低版本redis數據庫中,對低版本進行rdb文件備份,使用redis rdb tools工具進行分析。(redis-dump 工具安裝與使用)生產環境64G的數據,在對測試環境6G(遠小于64G)數據的緩存進行備份時訪問出現connect time out 連接超時問題。最終調查結果是緩存數據過大,該工具不適用大數據量緩存。如果換成小數據量的緩存數據庫該方案是可行的。
????????接著使用第三個方案:新建主從復制服務器(如何搭建主從復制服務器?),將緩存數據同步到低版本redis(3.0)緩存數據庫中。同樣報錯:
? ? ? ? ? Invalid RDB version number 10 ????//提示目標rdb文件版本過高,無法進行分析
????????最后一個方案采用rdb與aof混合備份數據庫的方式,來避免宕機問題。(如何搭建redis緩存混合持久化方案?)單獨采用rdb快照容易丟失本地到下一次快照之間寫入的數據。單獨使用aof日志在系統啟動時加載數據效率低。混合使用rdb與aof可以兼并兩者的優點,互相補充短板。
Redis緩存數據庫設計建議:緩存中的數據不要設置永久性數據,可以定時往數據庫中同步數據。這樣的好處有:1. 所有的數據都會過期并釋放內存,不會產生未知垃圾。2. 定時同步可以保證數據新鮮,準確。