(1)Redis String原理

2020-11-10  本文已影响0人  hedgehog1112

比于 Java可修改,是动态字符串(Simple Dynamic String 简称 SDS)内部更像ArrayList

维护一个字节数组 预分配冗余空间以减少频繁分配,扩容/缩容:1)<1MB时,扩容加倍,其他只扩1MB最大512MB     2) 惰性缩容。不释放空间,留给到期释放等机制释放。

多个字节组成,每个字节8bit.还可以当做 bitmap 去用

概要:基本操作、存整数、原理

1、字符串的基本操作 

mset 和 mget 可对多个字符串读写 节省网络开销

2、可存整数

1)遇到incr,decr自增自减,转成数值计算,此时redisObject的encoding字段为int。整数范围在 $-2^{64}$至$2^{64}-1$。

2)encoding不同场景显示不一样,容量不同:embstr:<=39字节的字符串。int:8个字节的长整型。raw:大于39个字节的字符串。

3)常规计数:微博数,粉丝数等。访问次。INCRBY让这些变容易,通过原子递增计数。。

4、复杂度o(1)

3、内部原理

content :保存字符串内容,和 c 一样用 0x0作为结束字符.结束字符不会被计算len 中

capacity和len 都是泛型,不直接用 int,因为 Redis 不同数据类型不同长度.并在创建字符串时 len 和 capacity 一样大,没有冗余空间,因为修改字符串场景很少.(Redis 真的将内存优化到了极致)

编码格式待整理:https://zhuanlan.zhihu.com/p/67876900

上一篇下一篇

猜你喜欢

热点阅读