redis从实现的数据结构、内存回收、共享对象、空转时长说明为什么要构建对象系统

redis没有直接使用数据结构来实现键值对的数据库,而是基于这些数据结构构建了一个对象系统,这种对象系统实现了基于引用计数计数的回收机制,当程序不在使用某个对象的时候这个对象占有的内存将会被自动释放,通过引用计数技术实现了对象共享机制,可以让多个数据库键共享同一个对象来节约内存。redis在执行命令的时候可以根据对象的类型判断是否可以执行给定的命令,可以针对不同的使用场景为对象设置不同的数据结构,从而优化在使用中的效率,reids对象带有访问时间可以计算空转的时长,在服务器开启了maxmemory的时候,空转时长较大的那些键将会优先被服务器删除。对象系统中有五种有五种数据类型,数据库中的键为字符串类型,值可以为字符串类型,list类型,set类型,和sorted set类型每个对象都由一个redisObject结构表示:encoding表示对象使用了什么数据结构作为底层实现,通过encoding属性来设定使用的编码方式底层实现的数据结构,可以根据不同的场景来为一个对象设置不同的编码,优化某一个场景的使用效率,OBJECT ENCODING 对象,long类型的整数,embtr编码的简单动态字符串,简单动态字符串,字典,双端链表,压缩列表,整数集合,跳跃表和字典 type表示对象的类型五种类型中的一种,TYPE 对象,Redis_String,Redis_list,Redist_hash,Redis_set,Redis_zSet 。str指向底层实现的数据结构
reidsObject{
encoding
type
str
refcount
lru
}
对象系统使用引用计数技术的内存回收机制,并且使用引用计数技术实现了对象共享机制使得让多个数据库键共享同一个对象节约内存,redis对象结构redisObject中有一个属性叫做refcount,refcount表示引用计数,当创建一个新的对象的时候,refcount将会被初始化为1,当对象被某个程序使用的时候,refcount的值将会加一,当对象不再被程序使用的时候,refcount的值将会减1,refcount的值为0的时候,对象占用的内存将会被释放,对应着对象的声明周期,创建对象,使用对象,释放对象。如果数据库 中键A创建了字符串对象,如果数据库中键B也要创建一个相同内容的字符串对象,这个时候,可以让数据库键共享对象,让数据库中键的值指向这个对象,让这个对象的引用计数refcount加1,set A 100,创建一个值为100的键A,对象的refcout值最少为2,因为这个对象要被服务器程序持有,以及被键A共享两个程序拥有OBJECT REFCOUNT 对象
redisObject 结构中的lru属性记录了对象最后一次被命令程序访问的时间,Object idletime 对象 闲置的时间,Object idletime 对象 这个命令在访问对象的时候不会修改lru属性的值,当服务器设置了maxmemory的时候,并且用于内存回收的算法为volatile-lru allkeys-lru的时候,当服务器占用的内存数超过maxmemory的时候,空转时间较长的键将会被服务器优先释放从而进行内存回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值