一 类型检查和多态
类型检查,即有的命令是只针对特定类型的,如果类型不对,就会报错,此处的类型,是指的键类型,即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打印出来),当比如说内存过低时,就会优先释放空转时间最长的对象的内存。
时间: 2024-10-19 13:33:00