redis的对象结构(来自源码)
内存回收机制:
redis中,创建一个对象时,引用计数值会变为1.
每当一个地方引用它,会自增1
每当一个地方停止引用,会减1
当计数器为0时,销毁该对象
对象共享:
类似于Java一样,当创建一个string a = ”100“时,会将aaa存入内存
但是当string b = ”100“时,并不会额外创建一个”100“,而是将b指向a的内存
这种方式就是共享。同时若是共享的话,那么”100“的引用计数器会+1
redis不会共享字符串类型的值。因为共享对象时,需要两个值完全一模一样,所以要在共享前先判断。然而对string类型的值判断时,时间复杂度时O(n),所以干脆不共享
空转时长:
在内存回收时使用了LRU调度算法的类似机制(详见计算机组成原理,LRU调度算法又名最近最久未使用算法,即是相对时间内最少被使用到的对象将会被回收),故而需要有一个字段来表示它距离上次被引用过了多久,这个字段的名称叫做lru
到现在,redis中的对象实际上已经开始清晰了。有关于值的部分均是由之前讲过的一个个数据结构所组成,而管理这些对象是由本篇讲的回收机制做处理