redis已经成为各大互联网以及中小型公司的必备技术栈,接下来就了解下redis的系列教程

①内存:在C字符串中为一个老的字符串追加字符,如果预先没有分配好足够的内存空间,则会导致数据溢出的问题

②时间复杂度O(n):C字符串则必须遍历直到遇到’\0’,所以它的复杂度是O(n)。

1:SDS也是用char[]存储的,但是源码中判断了多少字节用多大的,所以时间复杂度为O(1)

2:还有空间预分配,惰性空间释放,当字符容量增加的时候,已经有提前预分配好的内存,当容量减少的时候,

因此与 raw 相比,embstr 的好处在于创建时少分配一次空间,删除时少释放一次空间,以及对象的所有数据连在一起,寻找方便。

而 embstr 的坏处也很明显,如果字符串的长度增加需要重新分配内存时,整个RedisObject 和 SDS 都需要重新分配空间,因此 Redis 中的 embstr 实现为只读。

当我们设置k1时,类型为embstry ,当k2超过44字符时就是raw,那么当k1append的时候,就会变成raw,不是超过44个字节才会是raw吗?embstr是只读的,所以如果进行修改,就会将embstr转化为raw在进行修改

如果从超过44个字符降低为44以下,会还原为embstr吗?不会 因为redis的原则就是支持小类型的转化为大类型的

思考一个问题:redis底层为什么要用redisObject包装value呢?因为5种数据类型的value都是redisObject,可以根据对象的类型动态地选择存储结构和可以使用的命令,实现节省空间和优化查询速度

在计算机里所有的数据都是以二进制的形式存储的,每一个非中文字符占一个字节(Byte),中文字符占两个字节,而一个字节又是占8bit。

在Redis中的存储形式转换成二进制就是:101110010,而偏移量实际上指的就是从左往右数,偏移量是几就是第几位,偏移量0就是第0位。

言归正传,GETBIT的用法就是获取指定偏移量的bit,就很容易理解了吧,为了看清楚把上面的二进制换行一下

相信看到这里大家应该就明白了GETBIT的用法,那么SETBIT也就不言而喻了。设置或清除指定偏移量上的位(bit),指的就是修改指定偏移量的值,当然在二进制中只有0和1,如果设置其他的值就会报错:那我们现在操作一下,把偏移量为2的bit修改成0,再打印出来:(01100010→01000010),原来的‘b’就变成了’B’,下一篇说明对Hash的认识。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注