赞
踩
我们前面了解了redis的数据结构,对象。但是redis对于这些对象的使用和管理策略需要也熟记于心,这篇文章我们就了解一下吧。
如何实现的类型检查?
- 在执行llen命令之前,确保对象内type是不是命令对应类型
- 如果是的话就执行
- 否则就返回上图类型错误
如何实现通用命令多态?
而这些通用命令也是一样的思路。
c 语言不具备内存回收功能,所以redis自行实现了,内存回收。使用的策略是引用计数策略和 jvm 的可达性分析不一样。
- 当创建一个对象的时候,引用数设置为1
- 当被一个新程序使用的时候,引用数加1
- 不被一个程序使用的时候,引用数减1
对象的生命周期包括:创建对象,操作对象,和释放对象
对象共享的目的是节约内存,实际上和 java 语言类似。
redis内部已经实现了这些,但是我们理解内部过程对于熟练使用redis极为重要。
另外,这些共享对象不单单只有字符串键可以使用,那些在数据结构中嵌套了字符串对象的对象(linkedlist编码的列表对象、hashtable编码的哈希对象、hashtable编码的集合对象,以及zset编码的有序集合对象)都可以使用这些共享对象。
redisObject中还有最后一个属性,lru,长度为22字节
这个属性记录了上次使用时间,当前之间减去lru可以计算出空转时长
如果服务器打开了maxmemory选项,并且服务器用于回收内存的算法为volatile-lru或者allkeys-lru,那么当服务器占用的内存数超过了maxmemory选项所设置的上限值时,空转时长较高的那部分键会优先被服务器释放,从而回收内存
过期时间并非保存在对象内,而是另外开了一个字典exoires,专门用于保存对象的生存时间。好处是集中处理更便捷。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。