引用计数 refcount
每个redisObject对象都会带有一个引用计数 refcount,在创建一个新对象时该数值会被赋值为1,如果对象被引用时引用数会+1,不再被引用时-1,当该值为0时会被释放;
删除到期的对象
惰性删除
当使用到的时候才检查是否已过期;可能造成不在使用的键值一直停留在内存中
定时任务删除
默认10s,分为慢模式
和快模式
,两者的逻辑是一样的,只是超时时间不同,慢模式超时为25毫秒,快模式为1毫秒;
- 默认采用慢模式,随机检查20个键;
- 是否超过25%过期,没超过退出,超过执行下一步;
- 循环执行1~2步,如果时间超过25毫秒,那么在redis下次触发内部事件之前再次以快模式运行回收过期建任务;
内存达到设置的上限时执行的内存溢出控制策略
大致可分为,拒绝写入,根据LRU算法删除过期键还是所有键,随机删除过期键还是所有键,根据对象的ttl值删除最近将要过期的键值; 其中lru算法是根据redisObject中的lru属性,该属性记录对象的空转时间,即空闲时间;
对象内存共享
redis内部保存有0~9999的字符串对象,当使用到这些数字的字符串时,会引用这些共享对象,而不是新创建;