相信大家也都或多或少的瞭解些redis,知道他是內存性NoSQL數據庫。
那麼,疑問也就來了,這種內存型數據庫的數據在服務器宕機後,數據還會恢復嗎?
答案是會恢復的!因爲這種內存型數據庫也存在它的持久化機制,下面是redis的RDB-持久化觸發條件:
其含義如下:
①900秒內如果至少有1個key的值變化,則保存
②300秒內如果至少有10個key的值變化,則保存
③60秒內如果至少有10000個key的值變化,則保存
實際工作當中有同事讓我copy一份redis的dump.rdb文件給他,他要查看數據。
那麼rdb文件是如何被解析的呢?使用了什麼工具呢?
這裏就介紹一下最近了解的一個工具,準確的來說是python的一個庫【rdbtools】
一.安裝方式:
1.進入到python的相應目錄,比如:D:\Python\Python36\Scripts
2.打開cmd命令框
3.輸入指令:pip install rdbtools
4.安裝完成後在cmd中輸入指令:rdb 並觀察,若有如下圖所示則爲安裝成功
二.進行解析:
1.進入到dump.rdb文件所在目錄並打開cmd,輸入如下指令
rdb --command json dump.rdb > dump.json
執行時會報錯:提示需要安裝python-lzf依賴
同樣進入python的目錄,比如:D:\Python\Python36\Scripts,打開cmd並輸入:pip3 install python-lzf
再次執行解析rdb的指令即可!下面是轉格式後的結果:
2.瞭解rdb命令的相關參數:
這裏借鑑下網友的翻譯:
-h, –help #顯示此幫助消息並退出;
-c FILE, –command=FILE #指定rdb文件;
-f FILE, –file=FILE #指定導出文件;
-n DBS, –db=DBS #解析指定數據庫,如果不指定默認包含所有;
-k KEYS, –key=KEYS #指定需要導出的KEY,可以使用正則表達式;
-o NOT_KEYS, –not-key=NOT_KEYS #指定不需要導出的KEY,可以使用正則表達式;
-t TYPES, –type=TYPES #指定解析的數據類型,可能的值有:string,hash,set,sortedset,list;可以提供多個類型,如果沒有指定,所有數據類型都返回;
-b BYTES, –bytes=BYTES #限制輸出KEY大大小;
-l LARGEST, –largest=LARGEST #根據大小限制的top key;
-e ESCAPE, –escape=ESCAPE #指定輸出編碼,默認RAW;
3.生成內存報告
輸入入下指令:
rdb -c memory dump.rdb --bytes 128 -f dump_memory.csv
在同級目錄下生成文件dump_memory.csv