Redis使用DUMP命令和RESTORE命令对值进行序列化和反序列化

本文介绍了Redis中DUMP与RESTORE命令的基本用法及应用场景,通过具体实例展示了如何利用这两个命令实现数据的序列化与反序列化,特别适用于键值迁移场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 DUMP将一个key对应的值序列化 ,并返回被序列化的值;而RESTORE则将序列化值反序列化为原值。一个典型的应用是key的迁移与还原。例如:codis在key从一个节点迁移到另一个节点的过程中使用的就是SLOTSRESTORE(此命令是在RESTORE的基础上增加了批量处理一个SLOT下的多个key)

RESTORE key ttl serialized-value
ttl 生存时间,毫秒;如果 ttl 为 0 ,那么不设置生存时间。

下面的示例各分为4步:

  1. 先建一个Key-Value,
  2. 然后Value序列化,
  3. 删除Key之后
  4. 利用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'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值