DUMP将一个key对应的值序列化 ,并返回被序列化的值;而RESTORE则将序列化值反序列化为原值。一个典型的应用是key的迁移与还原。例如:codis在key从一个节点迁移到另一个节点的过程中使用的就是SLOTSRESTORE(此命令是在RESTORE的基础上增加了批量处理一个SLOT下的多个key)
RESTORE key ttl serialized-value ttl 生存时间,毫秒;如果 ttl 为 0 ,那么不设置生存时间。
下面的示例各分为4步:
先建一个Key-Value,然后Value序列化,删除Key之后利用restore命令将序列化值反序列化为原值从而恢复原来的Key-Value。1)以交互式方式执行:
value为字符串的示例:
[root@dev test]# redis-cli 127.0.0.1:6379> set CH China OK 127.0.0.1:6379> dump CH "\x00\x05China\t\x00\xed\xbc\xe9\x8d\xbb\xed\xed\xec" 127.0.0.1:6379> del CH (integer) 1 127.0.0.1:6379> get CH (nil) 127.0.0.1:6379> restore CH 0 "\x00\x05China\t\x00\xed\xbc\xe9\x8d\xbb\xed\xed\xec" OK 127.0.0.1:6379> get CH "China"value为哈希表的示例:
127.0.0.1:6379> hset Jack Age 38 (integer) 1 127.0.0.1:6379> hset Jack Gender Male (integer) 1 127.0.0.1:6379> hset Jack Job Engineer (integer) 1 127.0.0.1:6379> hgetall Jack 1) "Age" 2) "38" 3) "Gender" 4) "Male" 5) "Job" 6) "Engineer" 127.0.0.1:6379> dump Jack "\r00\x00\x00\x00%\x00\x00\x00\x06\x00\x00\x03Age\x05\xfe&\x03\x06Gender\b\x04Male\x06\x03Job\x05\bEngineer\xff\t\x00\xef\x96\xd2Ns\xb0t\x84" 127.0.0.1:6379> del Jack (integer) 1 127.0.0.1:6379> hgetall Jack (empty list or set) 127.0.0.1:6379> restore Jack 0 "\r00\x00\x00\x00%\x00\x00\x00\x06\x00\x00\x03Age\x05\xfe&\x03\x06Gender\b\x04Male\x06\x03Job\x05\bEngineer\xff\t\x00\xef\x96\xd2Ns\xb0t\x84" OK 127.0.0.1:6379> hgetall Jack 1) "Age" 2) "38" 3) "Gender" 4) "Male" 5) "Job" 6) "Engineer"2)也可以在命令行来执行:
value为字符串的示例:
[root@dev test]# echo "set CH China" | redis-cli OK [root@dev test]# redis-cli --raw dump CH > temp.dump [root@dev test]# echo "del CH" | redis-cli (integer) 1 [root@dev test]# cat temp.dump | head -c-1 | redis-cli -x restore CH 0 OK [root@dev test]# echo "get CH" | redis-cli "China"value为哈希表的示例:
[root@dev test]# echo "hset Jack Age 38" | redis-cli (integer) 1 [root@dev test]# echo "hset Jack Gender Male" | redis-cli (integer) 1 [root@dev test]# echo "hset Jack Job Engineer" | redis-cli (integer) 1 [root@dev test]# echo "hgetall Jack" | redis-cli 1) "Age" 2) "38" 3) "Gender" 4) "Male" 5) "Job" 6) "Engineer" [root@dev test]# redis-cli --raw dump Jack > temp.dump [root@dev test]# cat temp.dump | hexdump -C 00000000 0d 30 30 00 00 00 25 00 00 00 06 00 00 03 41 67 |.00...%.......Ag| 00000010 65 05 fe 26 03 06 47 65 6e 64 65 72 08 04 4d 61 |e..&..Gender..Ma| 00000020 6c 65 06 03 4a 6f 62 05 08 45 6e 67 69 6e 65 65 |le..Job..Enginee| 00000030 72 ff 09 00 ef 96 d2 4e 73 b0 74 84 0a |r......Ns.t..| 0000003d [root@dev test]# echo "del Jack" | redis-cli (integer) 1 [root@dev test]# echo "hgetall Jack" | redis-cli (empty list or set) [root@dev test]# cat temp.dump | head -c-1 | redis-cli -x restore Jack 0 OK需要注意的是 head -c-1去掉dump文件里的最后一个字符'\n'