首页 > 代码库 > [redis读书笔记] 第一部分 数据结构与对象 对象特性

[redis读书笔记] 第一部分 数据结构与对象 对象特性

一 类型检查和多态

   类型检查,即有的命令是只针对特定类型的,如果类型不对,就会报错,此处的类型,是指的键类型,即robj.type.下面为有类型检查的命令:

技术分享

对于某一种类型,redis下底层的实现(编码类型 robj.encoding)可以是不同的,比如字符串键可以是ziplist或者linklist,那么可以想象,redis需要支持对命令的多态,无论编码类型是什么,都能得到正确的结果,

技术分享

 二 内存回收:

robj.refcount用于内存回收,创建新的robj时,refcount为1,对象被新程序使用,refcount加1,反之减1,最终为0时进行robj的回收。

三 对象共享:

  robj.refcount 还可以用来标记对象的共享,比如先后创建2个字符串100的键值对象,他们就会共享一个对象,从而节省空间:

技术分享

目前来说,redis在初始化服务器的时候,就create了0到9999的所有字符串,以供共享。

而为了防止过于复杂,redis其实只对包含整数字符串的对象进行共享,

技术分享

四 空转时长

robj.lru用来记录对象最后一次被使用的时间,通过这个时间和当前时间的差值,就能得到空转时间(可以用IDLETIME打印出来),当比如说内存过低时,就会优先释放空转时间最长的对象的内存。

技术分享

 

[redis读书笔记] 第一部分 数据结构与对象 对象特性