• 使用Memcache存储一些注意点
    时间:2012-03-20   作者:佚名   出处:互联网

    Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题

      Memcache的存储涉及到slab,page,chunk三个概念


      1.Chunk为固定大小的内存空间,默认为96Byte。
      2.page对应实际的物理空间,1个page为1M。
      3.同样大小的chunk又称为slab。
      Memcached再启动的时候根据-n和-f参数,产生若干slab。具体应用中Memcache每次申请1page,并将这1M空间分割成若干个chunk,这些chunk有着同样的大小,属于同一个slab。
     
      【添加】,通过memcache添加item的时候:


      1.  Memcache计算item的大小(key+value+flags),选取合适的slab(刚好能放下该item的slab)
      2.  如果这个item对应的slab未出现过,则申请1个page(注意,这1M空间不论是否达到memcached使用内存都可以申请成功)并加该item存入slab中的chunk
      3.  如果item对应的slab出现过,则在该slab中优先选择expired(free_chunks)和delete(在1.2.2中delete的chunk存在着不能被重复利用的问题)的chunk进行存储,其次将选择未使用过的chunk(free_chunks_end)进行存储。
      4.  如果item对应的slab出现过,但是对应的slab已经存储满了,那么会申请一个新的page,这个page被分为对应大小的chunk,继续存储。
      5.  如果item对应的slab出现过,但是对应的slab已经存储满了并且memcache也达到了最大内存使用。将使用lru算法,清除item(可能将未过期的item清除)此时会有eviction++
     
      【删除】:


      1.  Delete操作只是将该chunk置为删除状态,这样在下次使用将优先利用这样的chunk。
     
      【flush】


      1.  Flush操作相当于将所有的item失效的一个动作。并不会改变memcache内存分配情况。
     
      一些注意


      1. memcache已经分配的内存不会再主动清理。
      2. memcache分配给某个slab的内存页不能再分配给其他slab。
      3. flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。
      4. memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制
      5.由于memcache的分布式是客户端程序通过hash算法得到的key取模来实现,不同的语言可能会采用不同的hash算法,同样的客户端程序也有可能使用相异的方法,因此在多语言、多模块共用同一组memcached服务时,一定要注意在客户端选择相同的hash算法
      6.启动memcached时可以通过-M参数禁止LRU替换,在内存用尽时add和set会返回失败
      7.memcached启动时指定的是数据存储量,没有包括本身占用的内存、以及为了保存数据而设置的管理空间。因此它占用的内存量会多于启动时指定的内存分配量,这点需要注意。
      8.memcache存储的时候对key的长度有限制,php和C的最大长度都是250

    网友留言/评论

    我要留言/评论

    相关文章

    浅谈Squid在图片存储架构中的应用:将近快一个月没写文章了,太懒散了,今天振作了一下,写了篇关于Squid的文章,Squid作为分布式代理缓存服务器真的非常的棒,希望本文对你有帮助。
    运维必须要知道的几个 Linux 服务器监控命令:如果你是个运维管理同学,如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。
    SMTP的相关流程和命令介绍:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
    基于Facebook和Flash平台的应用架构解析(三):Flash平台可帮助你构建富用户体验的应用,而Facebook平台可帮助你构建富社会化体验的应用。将二者合而为一,你就可以构建高交互性、富于表现力,并融入了社会化功能的杀手级应用了。
    基于Facebook和Flash平台的应用架构解析(二):Flash平台可帮助你构建富用户体验的应用,而Facebook平台可帮助你构建富社会化体验的应用。将二者合而为一,你就可以构建高交互性、富于表现力,并融入了社会化功能的杀手级应用了。
    基于Facebook和Flash平台的应用架构解析(一):Flash平台可帮助你构建富用户体验的应用,而Facebook平台可帮助你构建富社会化体验的应用。将二者合而为一,你就可以构建高交互性、富于表现力,并融入了社会化功能的杀手级应用了。
    由12306.cn谈谈网站性能技术:12306.cn网站挂了,被全国人民骂了。我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正。(这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西)
    百万级PHP网站架构工具箱介绍:Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,今天我们就来了解一下该站点的架构技术。
    memcacheq队列服务安装与原理:  Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
    Nginx + PHP-FPM + APC=绝妙的组合:本文将介绍目前让PHP最快的方法:Nginx + PHP-FPM + APC,看似有些复杂,实际上我们只需要几个步骤就可以完成,并且性能远超Apache,有兴趣的朋友不妨去试一试。