1、导出redis

  1. #!/bin/bash
  2. REDIS_HOST=localhost
  3. REDIS_PORT=6379
  4. REDIS_DB=1
  5. KEYNAME=redis:hash:*
  6. KEYFILE=key.txt
  7. echo "KEYS $KEYNAME" | redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB > $KEYFILE
  8. OUTFILE=valuelist.txt
  9. TEMPFILE=$OUTFILE.tmp
  10. echo > $TEMPFILE
  11. for key in `cat $KEYFILE`
  12. do
  13. echo $key
  14. #echo "HGETALL $key" | redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB >> $TEMPFILE
  15. echo "GET $key" | redis-cli -h $REDIS_HOST -p $REDIS_PORT -n $REDIS_DB >> $TEMPFILE
  16. done

2、整理导出的结果

  1. cat $TEMPFILE|xargs -n 2|awk -F" " -v KEYNAME=$KEYNAME '{print "HSET "KEYNAME " " $1, "\""$2"\""}' > $OUTFILE

其中的xargs -n 2是把2行合成一行,换行符用空格代替

然后用awk按空格分开,$1是keynam $2是key的值

再次转换成HSET的格式,其中用到KEYNAME变量,这个要用-v预先定义。

最后转化为 HSET KEYNAME KEY "VALUE"格式。

3、导入转换的结果

  1. cat $OUTFILE | redis-cli -h localhost -p 6379

二、直接用Redis的Dump和Restore导出和导入

    1. redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
04-28 06:22