需求環境
Redis-dump-load是基于python2.7,利用redis子產品編寫的一個導出/導入redis資料的一個python程式,是以,需求環境如下:
python 2.7
pip2.7
python.redis子產品
安裝程式
1
2
3
4
5
<code># pip-2.7 install redis</code>
<code># cd /usr/local</code>
<code># git clone https://github.com/p/redis-dump-load.git</code>
<code># cd redis-dump-load</code>
<code># ./redisdl.py --help</code>
<a href="https://s5.51cto.com/oss/201711/02/d3f26b3936ab666af9aa46a905c16eae.png" target="_blank"></a>
導出資料
假設内網有redis:192.168.1.20:6379,現可利用redisdl.py程式導出該redis資料到本地的json檔案:
<code># python redisdl.py -H 192.168.1.20 -p 6379 -d 0 -o /tmp/db0.json</code>
<code># ll /tmp/db0.json</code>
<code>-rw-r--r--. 1 root root 411772591 Oct 17 09:15 </code><code>/tmp/db0</code><code>.json</code>
利用以上指令導出192.168.1.20:6379執行個體中的db0資料到本地/tmp/db0.json檔案中,從info資訊中可以看到db0一共有1758個key資料。
注:
執行導出資料指令時,若出現類似decode(encoding)的字元類編碼錯誤時,可将程式中‘decode(encoding)’改為如下:
decode('utf-8','ignore')
導入資料—redis單執行個體
準備一個空的redis單執行個體:192.168.204.128:6379,把之前導出的/tmp/db0.json檔案資料導入。
<code># python redisdl.py -l -H 192.168.204.128 -p 6379 -d 0 /tmp/db0.json</code>
可以看到資料已導入,導入了1756個key,與上述看到1758個key相差了兩個,大部分的key資料已導入到新的redis執行個體中,缺失的2個key應該是在導出資料後源redis新增的key資料。
導入資料—redis_cluster
準備一個空的redis_cluster叢集(192.168.1.20:8001/8002/8003),并部署corvus(redis-porxy:192.168.1.20:12345),可以利用corvus把之前到處/tmp/db0.json檔案資料導入到叢集中去。
叢集資訊:
<code># /path/to/redis/redis-trib.rbcheck 192.168.1.20:8001</code>
<code># redis-cli -h 192.168.1.20 -p 12345 info</code>
資料導入:
<code># python redisdl.py -l -H 192.168.1.20 -p 12345 -d 0 /tmp/db0.json</code>
分别檢視8001、8002、8003三個單獨rediscluster執行個體,可以看到通過corvus導入的資料已經分攤到各redis執行個體中,分别為545、626、584個keys。總資料為1755(導入後一個key過期了)。
redisdl.py導入資料時,會去檢查redis的版本,由于使用corvus時,檢查出的版本為corvus版本,比redis3.0+的版本低,故執行時會報錯,需手動更改redisdl.py腳本:
<code># vi redisdl.py</code>
<code># version = [int(part) for part inself.info()['redis_version'].split('.')]</code>
<code>version = 3</code>
<code></code>
本文轉自 icenycmh 51CTO部落格,原文連結:http://blog.51cto.com/icenycmh/1978295,如需轉載請自行聯系原作者