Redis (六 深入了解redis内核)

### 内存淘汰

redis内存不足时,有两种处理方式:

(1)启用虚拟内存:将vm-enabled设置为yes

(2)启用内存淘汰:将maxmemory设置为一个大于0的整数

redis的使用内存大于最大分配可用内存时,开始进行淘汰,memcache只有LRU算法,redis有

1 随机淘汰:从数据库随机删除一个key

2 LRU算法:删除一个最近最少访问的key

3 TTL淘汰:删除最快过期的key


### 对象引用计数器

为了防止一个客户端调用get的同时,另一个client调用del删除key而导致的内存端错误,redis使用了内存引用计数器:给对象添加一个引用计数器,有新的引用时,计数+1 ,引用失效,计数器-1 ,引用计数为0时,redis把key删除,对象初始化时,引用计数为1  get时,引用+1  del时,引用-1 

eg:实例化refcount=1  

           get refcount=2  

           del  refcount=1  

          get结束 refcount=1,此时可以被删除


### 自动关闭超时连接

server.idletime是设置的timeout的时间,timeout=0时,自动关闭不会触发

当连接建立,却不做任何操作时,超过timeout会自动断开连接,当使用连接池时,不用配置timeout的时间,否则连接池里的连接会因超时而断开



### redis清除过期数据

redis为每个存储的数据设置一个过期时间,超过这个时间,redis把过期数据删除,redis删除数据分两个阶段

(1)在定时器serverCron中进行,每隔100ms执行一次

        activeExpireCycle随机获取一些key,如果当前时间>数据设置的过期时间,删除key,如果这些key有25%的数据过期,清理过程会继续进行,以释放更多的内存

(2)在用户get时,如果key的expiretime<time(),删除数据


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值