对象

本贴最后更新于 191 天前,其中的信息可能已经时移世异

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:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428154331-5tlvjca.png)​

	2.linkedlist:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428154759-rvyb5tc.png)​
2.2 编码的转换
	ziplist:<64字节 && <512个     否则 linkedlist

3.哈希对象

3.1 数据结构
	1.ziplist:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428155324-56r5922.png)​

	2.hashtable:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428155424-agn1tky.png)​
3.2 编码的转换
	zpilist:<64字节 && <512个    否则 hashtable

4.集合对象

4.1 数据结构
	1.inset:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428155710-15v76qx.png)​

	2.hashtable:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428155739-lrsr5lb.png)​
4.2 编码的转换
	inset:整数 && <512个,   否则hashtable

5.有序集合对象

5.1 数据结构
	1.ziplist:![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428155937-1qpqgl7.png)​

	2.zset = skiplist+hashtable

		![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428160155-b6xy7cr.png)​
5.2 编码的转换
	ziplist: <64字节 && <128个

6.类型检查与命令多态

![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428160426-31e9r4t.png)​

7.内存回收

redisObject的    int  refcount属性;

创建=1;使用+1;不使用-1;=0时回收;

8.对象共享

![image](https://b3logfile.com/file/2024/05/siyuan/1715565781211/assets/image-20240428161118-akii56m.png)​

为什么不共享包含字符串的对象:复杂度高,只对包含整数值的字符串对象进行共享

Redis会在初始化服务器时,创建0-9999的字符串对象,后面直接共享,不再新创建

9.对象的空转时长

redisObject的    unsigned  lru属性,对象最后一次被命令程序访问的时间;

作用:

	1.命令  object idletime 打印 空转时长

	2.服务器打开了maxmemory选项,且服务器用于回收内存的算法为volatile-lru或者allkeys-lru,那么当服务器占用的内存数超过了maxmemory设置的上限值,空转时长较高的会被优先内存释放
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    567 引用 • 3532 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...