如何解析 redis 的 rdb 檔案

2022-01-26 01:13:14 字數 3540 閱讀 8325

目錄常見問題 faq

參考

pip install rdbtools python-lzf
或者

git clone 

cd redis-rdb-tools

sudo python setup.py install

usage: usage: rdb [options] /path/to/dump.rdb

example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb

positional arguments:

dump_file rdb dump file to process

optional arguments:

-h, --help show this help message and exit

-c cmd, --command cmd

command to execute. valid commands are json, diff,

justkeys, justkeyvals, memory and protocol

-f file, --file file output file

-n dbs, --db dbs database number. multiple databases can be provided.

if not specified, all databases will be included.

-k keys, --key keys keys to export. this can be a regular expression

-o not_keys, --not-key not_keys

keys not to export. this can be a regular expression

-t types, --type types

data types to include. possible values are string,

hash, set, sortedset, list. multiple typees can be

provided. if not specified, all data types will be

returned

-b bytes, --bytes bytes

limit memory output to keys greater to or equal to

this value (in bytes)

-l largest, --largest largest

limit memory output to only the top n keys (by size)

-e , --escape

escape strings to encoding: raw (default), print,

utf8, or base64.

-x, --no-expire with protocol command, remove expiry from all keys

-a n, --amend-expire n

with protocol command, add n seconds to key expiry

time

引數解析

-c 執行命令 輸出不同格式的資料

json; 輸出 json 格式的字串 如:

diff; 匯出可供 diff 、kdiff 、 vimdiff 比較的資料

justkeys; 只輸出 key

justkeyvals; 只輸出鍵值對,以空格分隔

memory; 輸出記憶體分布狀態

protocol; 輸出原始的 resp 協議

-f 指定輸出到檔案

-n 指定輸出的 db

-k 指定輸出哪些 key; 可以使用正規表示式, 如:'^users_\d+$'

-o 排除哪些 key; 可以使用正規表示式

-t 指定輸出 value 的型別

-b 指定大於此位元組數的 key 輸出

-l 輸出最大的多少個 key

-e 轉義字串到其他格式

raw 原始字串

print

utf8 輸出原始 utf8 格式字串

base64 對於二進位制資料來說,可以先 base64 儲存到檔案,然後在程式中 decode 出來

-x 在匯出 resp 協議內容時,去掉過期時間

-a 匯出 resp 協議內容時,給有過期時間的 key 加上幾秒鐘過期時間

rdb --command memory dump.rdb > memory.csv
生成 csv 格式的記憶體報告。包含的列有:

資料庫 id,資料型別,key,記憶體使用量(byte),編碼。記憶體使用量包含 key、value 和其他值,結果:

0,sortedset,page_rank,80,ziplist,1,9

# 使用這個命令會將儲存的 int 值顯示為 json 的字串

> rdb -c json --db 2 --type hash --key "a.*" /var/redis/6379/dump.rdb

[{},}]

> rdb --command diff /var/redis/6379/dump1.rdb | sort > dump1.txt

> rdb --command diff /var/redis/6379/dump2.rdb | sort > dump2.txt

# 使用 diff 軟體檢視 diff

> kdiff3 dump1.txt dump2.txt

> redis-memory-for-key person:1

> redis-memory-for-key -s localhost -p 6379 -a mypassword person:1

key person:1

bytes 111

type hash

encoding ziplist

number of elements 2

length of largest element 8 # hash 中占用記憶體最大的那個 value 的占用位元組數

如何解析rdb檔案

相信大家也都或多或少的了解些redis,知道他是記憶體性nosql資料庫。那麼,疑問也就來了,這種記憶體型資料庫的資料在伺服器宕機後,資料還會恢復嗎?答案是會恢復的!因為這種記憶體型資料庫也存在它的持久化機制,下面是redis的rdb 持久化觸發條件 其含義如下 900秒內如果至少有1個key的值變...

redis中的RDB快照檔案恢復

在redis中我們使用rdb快照檔案恢復資料時,如果我們開啟了redis主從,我們需要先把redis從關掉,然後我們才能來執行redisrdb快照檔案恢復 因為從庫開啟,會導致redis主庫重啟讀取不到rdb檔案,會導致重啟過後rdb檔案是redis初始化的rdb,不是你要恢復的rdb檔案,我們把r...

ios中如何解析xml檔案

ios中如何解析xml檔案 兩種方法 1.ios中已有的nsxmlparse類 2.google的gdataxml也是基於libxml2的,因此在使用gdataxml之前,你需要先 匯入libxml2。這裡詳解ios中的nsxmlparse nsxmlparser 實現的是sax方法解析xml檔案。...