redis中的对象(二),浅谈内存回收机制

本文介绍了Redis中的对象结构,包括内存回收机制,其中对象的引用计数用于决定何时销毁对象。此外,文章还提到对象共享的概念,但指出Redis不共享字符串以避免不必要的O(n)时间复杂度检查。同时,每个对象都有一个lru字段记录上次被引用的时间,用于类似LRU的内存管理策略。总结了Redis如何管理其内部对象,确保高效且节省内存。
摘要由CSDN通过智能技术生成

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中的对象实际上已经开始清晰了。有关于值的部分均是由之前讲过的一个个数据结构所组成,而管理这些对象是由本篇讲的回收机制做处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值