Memcached内存管理模型与LRU算法优化

Memcached 采用的是 Slab allocation 内存模型,如下图:
Slab allocation 内存模型
说明:
1、最大内存默认64兆,通过-m调整,内存空间有slab class构成,内存以slab page为单位申请,分配到对应的slab class
2、slab page: 最大1兆,由一个或多个chunk组成
3、chunk: 实际存储数据的单元96字节 ~ 1兆
4、slab class增长的幅度,由增长因子决定 (默认1.25)
5、调整slab的增长因子,根据业务需求调整,进行调优

Memcached LRU 策略

(老版本1.4x之前 用的单链表,碰撞几率太高,导致互斥锁竞争)

新版架构图

在这里插入图片描述
说明:
每个Slab-class安排一个LRU,每个LRU拆分四个LRU类型,每个存储的数据都有两个标志位:FETCHED、ACTIVE

FETCHED: 该数据曾被请求过
ACTIVE: 该数据有两次或两次以上被请求,数据被移动时移除

TEMP: 该队列中的item TTL通常只有几秒,不会被挪动
具体时间可配置 stats settings temporary_ttl选项

HOT: 热点队列,数据不会长久存在此链表,一旦数据达到队尾,则开始移动。如果数据处于活动状态,将被移动到WARM,非活动状态,被移动到COLD

WARM: 访问量不大的数据
如果物品处于活动状态,将被移动到warm头部,非活动状态,移动到COLD

COLD: 最不活跃的数据
回收时如果处于active状态,则移动warm,否则删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值