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'