Redis的序列化和反序列化命令

不止是java等语言存在序列化和反序列化,在Redis中同样也存在序列化(dump命令)和反序列化(restore命令)。下面我们将通过讲解dump和restore命令的用法来了解Redis的序列化和反序列化。

不止是java等语言存在序列化和反序列化,在Redis中同样也存在序列化(dump命令)和反序列化(restore命令)。下面我们将通过讲解dump和restore命令的用法来了解Redis的序列化和反序列化。

dump命令

语法:dump key

序列化给定 key ,并返回被序列化的值,使用restore命令可以将这个值反序列化为 Redis 键。

序列化生成的值有以下几个特点:

  • 它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和。

  • 值的编码格式和 RDB 文件保持一致。

  • RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作。

  • 序列化的值不包括任何生存时间信息。

可用版本:

>= 2.6.0

时间复杂度:

查找给定键的复杂度为 O(1) ,对键进行序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小。

如果序列化的对象是比较小的字符串,那么复杂度为 O(1) 。

返回值:

如果 key 不存在,那么返回 nil 。否则,返回序列化之后的值。

实例:

# 设置greeting key的值为“hello, dumping world!”
redis> set greeting "hello, dumping world!"
OK

# 序列化greeting key
redis> dump greeting
"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"

# 序列化一个不存在的key
redis> dump not-exists-key
(nil)

restore命令

语法:restore key ttl serialized-value

反序列化给定的序列化值,并将它和给定的 key 关联。

参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。

restore 在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么restore会拒绝进行反序列化,并返回一个错误。

可用版本:

>= 2.6.0

时间复杂度:

查找给定键的复杂度为 O(1) ,对键进行反序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小。

有序集合(sorted set)的反序列化复杂度为 O(N*M*log(N)) ,因为有序集合每次插入的复杂度为 O(log(N)) 。

如果反序列化的对象是比较小的字符串,那么复杂度为 O(1) 。

返回值:

如果反序列化成功那么返回 OK ,否则返回一个错误。

实例:

# 设置一个greeting key,值为“hello, dumping world!”
redis> set greeting "hello, dumping world!"
OK

# 使用dump命令序列化greeting key
redis> dump greeting
"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"

# 反序列化greeting的序列化结果到greeting-again ke
redis> restore greeting-again 0 
"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
OK

# 获取反序列化后的key的值
redis> get greeting-again
"hello, dumping world!"

# 使用错误的值进行反序列化
redis> restore fake-message 0 "hello moto moto blah blah" 
(error) ERR DUMP payload version or checksum are wrong
一知半解的人,多不谦虚;见多识广有本领的人,一定谦虚。——谢觉哉
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号