1.字符串
1.1 数据结构
1.int:整数值 2.raw(SDS):字符串,>32字节, 调用两次内存分配创建redisObject和sdshdr 3.embstr:字符串,<=32字节 调用一次内存分配连续空间,创建redisObject和sdshdr 浮点数3.14自动转成字符串保存
1.2 编码的转换
int转 raw, embstr只要修改了就会转raw
2.列表对象
2.1 数据结构
1.ziplist: 2.linkedlist:
2.2 编码的转换
ziplist:<64字节 && <512个 否则 linkedlist
3.哈希对象
3.1 数据结构
1.ziplist: 2.hashtable:
3.2 编码的转换
zpilist:<64字节 && <512个 否则 hashtable
4.集合对象
4.1 数据结构
1.inset: 2.hashtable:
4.2 编码的转换
inset:整数 && <512个, 否则hashtable
5.有序集合对象
5.1 数据结构
1.ziplist: 2.zset = skiplist+hashtable 
5.2 编码的转换
ziplist: <64字节 && <128个
6.类型检查与命令多态

7.内存回收
redisObject的 int refcount属性; 创建=1;使用+1;不使用-1;=0时回收;
8.对象共享
 为什么不共享包含字符串的对象:复杂度高,只对包含整数值的字符串对象进行共享 Redis会在初始化服务器时,创建0-9999的字符串对象,后面直接共享,不再新创建
9.对象的空转时长
redisObject的 unsigned lru属性,对象最后一次被命令程序访问的时间; 作用: 1.命令 object idletime 打印 空转时长 2.服务器打开了maxmemory选项,且服务器用于回收内存的算法为volatile-lru或者allkeys-lru,那么当服务器占用的内存数超过了maxmemory设置的上限值,空转时长较高的会被优先内存释放
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于