1. 高性能key-value分布缓存,多线程,主线程/工作线程
  2. slab机制
    1. slab->trunk->item 默认slab1M
    2. trunk size 递增
    3. freelist  LRU
    4. 通过hashtable定位key
    5. 单向链表解决冲突
  3. 高性能特性,单节点百万级QPS

系统架构

  1. 网络处理
    1. libevent,多路复用io,epoll
  2. LRU
    1. 分段LRU
      1. temp LRU 新增小于61s直接进入
      2. hot LRU 新增大于等于61s  内存占所在slabclass小于20%
      3. warm LRU 被访问迁移到对头,否则迁移到cold LRU  小于40%
      4. cold LRU 被访问迁移到warm LRU,否则剔除   
  3. Slab
    1. 64个slabclass 1-63做存储 0做分配
    2. 所有slab大小相同,默认1M
    3. 相同slabclass trunk size仙童
    4. slabclass 随id 增加因子增大
    5. item一般不会填满trunk,但浪费空间可忽略
    6. 通过freelist管理空闲trunk
  4. hashtable扩容 2倍扩容

 网络模型

  1. libevent多线程网络模型
    1. 主线程连接调度给worker线程,通过管道发送通知
    2. 工作线程接受通知,队列获取新连接,读取cmd,解析处理,返回rsp
    3. 状态机 swtich case实现 主线程负责acccpet 和调度工作 tcp文本协议

 key定位

  1. hash计算定位
  2. 哈希冲突,每个桶链表解决hash冲突

 淘汰策略

  1. key过期
  2. flush_all 所有key失效
  3. 删除回收
    1. 惰性删除 查询校验过期时间是否过期
    2. item内存分配失败,lru对位扫描,没有失效,队尾强制删除 
    3. LRU维护线程,LRU异步淘汰