zoukankan      html  css  js  c++  java
  • memcache

    1)、memcache数据存放在内存中,这意味着:缓存数据的大小受机器内存的大小限制、重启后缓存清零。
    2)、内存分配方式:固定内存分配。
      内存分配以page为单位,当需要开辟新的内存空间时,先获得slab,再分配page,最后分chunk。然后将chunk绑定到对应的slab_class。
    3)、内存模型:slab_class,slab,page,chunk
      之间的关系:
      memcache将内存空间分为一组slab。
      每个slab又分为一组page,默认1M。同一个slab下,page大小相同且固定。
      每个page又分为一组chunk,chunk是用于存储数据,同一个slab下,chunk大小固定且相同。
      大小相同的chunk的slab被组织为一组slab_class。
      slab_class额外维护一个LRU链表,用于删除过期的数据。该链表的结构为:最近访问的数据会被移动到链头,需要删除数据时,从尾部开始删。
    item的结构:
      key,value,next,prev……
    4)、使用限制:
      Key最大为250个字节,超过该长度无法存储。
      默认情况下单个item最大数据是1MB,超过1MB的数据不予存储。
    5)、内存回收
      不主动回收内存,使用LRU(Least Recently Used 最近最少使用)规则复用内存空间。仅在没有更多可用内存的情况下,才进行LRU。
    6)、存取过程
      存:
      根据item的大小,选择相应的slab_class。根据哈希item.key的值,选择slab_class的哈希桶,再选择桶中对应的链表位置。
      更新slab_class中的LRU链。
      取:
      根据item的大小,选择相应的slab_class,根据哈希item.key的值,选择slab_class的哈希桶,找到对应的item,再判断是否过期。
      如果过期,则删除该item,返回null。如果没过期,则返回改item,并且更新slab_class对应的LRU链表。

    7)、类比为java中的HashMap模型。

  • 相关阅读:
    Ubuntu18.04下的音频录制和编辑软件Ardour及QjackCtl(jackd gui)
    Adobe After Effects CS6 操作记录
    编译安装和apt安装Nginx1.14.0
    Centos7.4和Ubuntu18.04安装PHP7.2
    Ubuntu与Windows7双系统下, 系统时间不一致的问题
    关于Thinkpad的立体声麦克风输入
    坑人的小米净水器: 漏水, 废水堵塞, 费用陷阱
    Photoshop CS6 操作记录
    Win7 64bit下值得推荐的免费看图软件
    Redis C客户端Hiredis代码分析
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9646828.html
Copyright © 2011-2022 走看看