一个简单的字符串,为什么 Redis 要设计的如此特别 (4)

一个简单的字符串,为什么 Redis 要设计的如此特别

上图中的示例我们看到,对一个 embstr 编码的字符串对象进行 append 操作时,长度还没有达到 45,但是编码已经被修改为 raw 了,这就是因为 embstr 编码是只读的,如果需要对其修改,Redis 内部会将其修改为 raw 编码之后再操作。同样的,如果是操作 int 编码的字符串之后,导致 long 类型无法存储时(int 类型不再是整数或者长度超过 2 的 63 次方减 1 时),也会将 int 编码修改为 raw 编码。

PS:需要注意的是,编码一旦升级(int-->embstr-->raw),即使后期再把字符串修改为符合原编码能存储的格式时,编码也不会回退。

总结

本文主要讲述了 Redis 当中最常用的字符创对象,通过二进制安全字符串的特别逐步分析了 sds 的底层存储即编码格式,并分别介绍了每种编码格式的区别,最后通过示例来演示了编码的转换过程。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxdx.html