redis学习之对象

每次redis在数据库中新建一个键值对的时候,都要创建两个对象,一个作为键,一个作为值

type 记录了对象类型(字符串 列表 哈希 集合 有序集合)

encoding记录了对象所使用的编码,即这个对象使用什么数据结构作为对象的底层实现(long类型的整数 sds 字典 双端链表 压缩列表 整数集合  跳跃表和字典)

字符串对象

整数型字符串

上图是使用sds实现字符串

 

embstr编码 也是使用redisobject和sds结构,只是保存的字符串长度小于等于32字节,而且只会调用一次内存分配函数分配一块连续的空间,如下图

 

列表对象

列表对象的编码可以是ziplist或者linkedlist

 

哈希对象

哈希对象的编码可以是ziplist或者hashtable

hash编码的哈希对象使用字典作为底层实现

 

集合对象

集合对象的编码可以是intset或者hashtable

有序集合对象

有序集合对象的编码可以是ziplist或者skiplist

内存回收

C语言不具有自动回收内存的功能,在redisobject中有个一个计数的字段,新建redisobject时计数字段为一,当为零时,回收内存

对象共享

redis在初始化服务器时,会创建一万个字符串对象,0-9999,当服务器用到这些值时,就会共享使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值