Redis 數據遷移方法

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。

Redis 數據遷移方法

一、redis-dump遷移

redis-dump需要ruby.2.2.0以上版本,因此,需要先升級。

1、更新編譯環境的包
<code>  yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel/<code>
2、安裝RVM,通過RVM安裝升級
<code>  curl -L get.rvm.io | bash -s stable
  source /etc/profile.d/rvm.sh
  rvm -v                 //安裝完成後,通過該方法測試是否安裝正常/<code>
3、更新RVM安裝鏡像
<code>  vim /usr/local/rvm/user/db
 
  ruby_url=https://cache.ruby-china.org/pub/ruby
 
  ruby -v             //查看ruby版本
  rvm list known   //列出已知ruby版本
  rvm install 2.4   //安裝ruby2.4版本,會自動去匹配/<code>
4、更新gem版本
<code>  gem update --system               //需要科學上網
  gem -v                             //查看版本號
  gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/   //更換源鏡像
  gem sources -l     //查看源鏡像內容/<code>
5、安裝redis-dump
<code>  gem install redis-dump -V               //安裝redis-dump
  redis-dump -v                               //查看版本號及是否安裝正常

  redis-dump -u 源地址:6379 -a password > /data/deploy/redis/data/redis_6378.json   //導出
  < redis_6378.json redis-load -u 目標地址:6379 -a password -n       //導入/<code>

二、Redis遷移

源服務器:
<code>  ./redis-cli -h 源IP地址 -a 源密碼 config set appendonly yes  //開啟aof功能/<code>

開啟後,數據在redis/data/6379/ 文件夾裡面

<code>  ./redis-cli -h 源IP地址 -a 源密碼 config set appendonly no  //關閉aof功能/<code>
目標服務器:
<code>  ./redis-cli -h 目標IP地址 -a 目標密碼 --pipe < data/6379/appendonly.aof/<code>

三、腳本遷移

1、Redis全量合併
<code>  #!/bin/bash
  src_ip=源地址
  src_port=6379
  src_db=0
  src_pw='密碼'
 
  dest_ip=目標地址
  dest_port=6379
  dest_db=0
  desc_pw='密碼'
 
  ./redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db keys "*" | while read key
  do
  ./redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db --raw dump $key | perl -pe 'chomp if eof' | ./redis-cli -h $dest_ip -p $dest_port -a $desc_pw
  -n $dest_db -x restore $key 0
      echo "migrate key $key"
  done/<code>
2、差異合併
<code>  #!/bin/bash
  src_ip=127.0.0.1
  src_port=8090
  src_db=14
  src_pw='1234'
 
  dest_ip=127.0.0.1
  dest_port=6379
  dest_db=2
  desc_pw='1234'
   
  #要遍歷的key
  k=(test ws we)
 
  for loop in ${k[*]}
  do
      redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db --raw dump $loop | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a $desc_pw -n $dest_db -x restore $loop 0
      echo "The value is: $loop"
  done/<code>
3、導入某個key
<code>  redis-cli -h 127.0.0.1 -p 8090 -a 1234 -n 14 --raw dump test | perl -pe 'chomp if eof' | redis-cli -h 127.0.0.1 -p 8090 -a 1234 -n 15 -x restore test 0/<code>



分享到:


相關文章: