您现在的位置是:主页 > 数据库技术 > 数据库技术

如何分析memcached的删除机制和发展方向

IDCBT2021-12-29服务器技术人已围观

简介本篇文章为大家展示了如何分析memcached的删除机制和发展方向,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 memcached是缓存,所以数

本篇文章为大家展示了如何分析memcached的删除机制和发展方向,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

memcached是缓存,所以数据不会永久保存在服务器上,这是向系统中引入memcached的前提。 下面介绍memcached的数据删除机制,以及memcached的最新发展方向——二进制协议(Binary Protocol) 和外部引擎支持。

memcached在数据删除方面有效利用资源数据不会真正从memcached中消失

上次介绍过, memcached不会释放已分配的内存。记录超时后,客户端就无法再看见该记录(invisible,透明), 其存储空间即可重复使用。

Lazy Expiration

memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。 这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。

LRU:从缓存中有效删除数据的原理

memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况, 此时就要使用名为 Least Recently Used(LRU)机制来分配空间。 顾名思义,这是删除“最近最少使用”的记录的机制。 因此,当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。 从缓存的实用角度来看,该模型十分理想。

不过,有些情况下LRU机制反倒会造成麻烦。memcached启动时通过“-M”参数可以禁止LRU,如下所示:

$ memcached -M -m 1024

启动时必须注意的是,小写的“-m”选项是用来指定最大内存大小的。不指定具体数值则使用默认值64MB。

指定“-M”参数启动后,内存用尽时memcached会返回错误。 话说回来,memcached毕竟不是存储器,而是缓存,所以推荐使用LRU。

memcached的最新发展方向

memcached的roadmap上有两个大的目标。一个是二进制协议的策划和实现,另一个是外部引擎的加载功能。

关于二进制协议

使用二进制协议的理由是它不需要文本协议的解析处理,使得原本高速的memcached的性能更上一层楼, 还能减少文本协议的漏洞。目前已大部分实现,开发用的代码库中已包含了该功能。 memcached的下载页面上有代码库的链接。

    http://danga.com/memcached/download.bml

    二进制协议的格式

    协议的包为24字节的帧,其后面是键和无结构数据(Unstructured Data)。 实际的格式如下(引自协议文档):

     Byte/     0       |       1       |       2       |       3       |   
        /              |               |               |               |   
       |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
       +---------------+---------------+---------------+---------------+
      0/ HEADER                                                        /   
       /                                                               /   
       /                                                               /   
       /                                                               /   
       +---------------+---------------+---------------+---------------+
     24/ COMMAND-SPECIFIC EXTRAS (as needed)                           /   
      +/  (note length in th extras length header field)               /   
       +---------------+---------------+---------------+---------------+
      m/ Key (as needed)                                               /   
      +/  (note length in key length header field)                     /   
       +---------------+---------------+---------------+---------------+
      n/ Value (as needed)                                             /   
      +/  (note length is total body length header field, minus        /   
      +/   sum of the extras and key length body fields)               /   
       +---------------+---------------+---------------+---------------+
      Total 24 bytes

    标签:

    很赞哦! ()

本栏推荐