【学习笔记】Redis学习笔记——第8章 对象

第8章 对象

8.1 对象的类型与编码

在Redis中存储对象时,键值对全部封装为RedisObject。

8.1.1 类型(type)

记录了对象的类型,Redis存储的Key为字符串对象,而Value可以是字符串对象、列表对象、哈希对象、集合对象、有序集合对象当中的一种。

8.1.2 编码和底层实现(encoding)

记录了一个对象使用的数据结构实现,同一种对象会使用不同的数据结构来实现,比如哈希对象可以用压缩列表与字典两种数据结构来实现。

8.2 字符串对象

1>若字符串对象存储的是一个long型的整数,那么会直接存储一个整数。
2>若存储的是39字节内的短字符串,则使用embstr码的字符串(短字符串的优化存储方式)。
3>若存储的是大于39字节的段字符串则使用SDS来保存。

8.2.1 编码的转换

当对long类型进行操作使其变成字符串类型时,会转换为SDS保存。
当对embstr进行任何修改命令都会使用SDS来保存。

8.2.2 字符串命令的实现

略,P68。

8.3 列表对象

1>当元素小于512个,且所有字符串长度小于64字节时,使用ZipList压缩列表来实现。
2>其他情况使用链表来存储。

8.3.1 编码转换

当元素超过个数限制或存入一个长字符串时会转换为链表存储。

8.3.2 列表命令实现

略,P71。

8.4 哈希对象

1>当键值对数量小于512个,每个键值对长度小于64字节时使用压缩列表存储。
2>其他情况使用字典存储。
(字典就相当于Java中的hashMap,原理及实现应该就不用再赘述了)

8.5 集合对象

1>当元素数量不超过512个,且都为整数时使用整数集合实现。
2>其他情况使用字典实现,关系相当于Java当中hashSet与hashMap的关系。

8.6 有序集合对象

1>元素小于128个(不同于之前的512个,因为需要做排序所以使用了更小的最大长度限制),成员长度小于64字节,使用压缩列表。
2>其他情况使用跳表+字典实现,其中字典的Key保存了分值,Value保存的存储数据。

8.7 类型检查与命令多态

有些命令可以对任意类型键执行,有些只能对特定类型健执行。

8.7.1 类型检查的实现

通过检查不同健对应值对象的Type实现

8.7.2 多态命令的实现

通过编码或类型的不同来执行不同的方法。

8.8 内存回收

通过引用计数法回收内存

8.9 对象共享

当两个健保存同一个整数对象(0-9999)时,会指向同一个初始化好的对象,然后让引用计数器+1。

8.10 对象的空转时长

Redis对象存在lru字段,某些内存回收的配置会在内存达到上线时回收掉lru较大的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值