memcached实战系列(七)理解Memcached的数据过期方式、新建过程、查找过程

1.1.1. 新建Item分配内存过程

1:快速定位slab classid,先计算Item长度

key键长+flag+suffix(16字节)+value值长+结构大小(32字节),如90byte

如果>1MB,无法存储丢弃

取最小冗余的slab class

如:有48,96,120,存90会选择96

 

1.1.2. 按顺序寻找可用chunk顺序

(1)slot:检查slab回收空间slot里是否有剩余chunk

delete:delete时标记到slot

exptime:get时检查的过期对象标记到slot

(2)end_page_ptr:检查page中是否有剩余chunk

(3)memory:内存还有剩余空间可以用于开辟新的slab

(4)LRU

Memcached的数据存储方式的缺点

由于chunk的大小是预先分配好的特定长度,因此如果数据不能完全填满

chunk,那么剩余的空间就浪费了

1.1.3.  Lazy Expiration(延迟/惰性 过期)

Memcached不会监控记录是否过期,而是在外部来获取数据的时候,才检查记录的时间戳,因此称为Lazy Expiration。

 LRU(Least Recently Used最近最少使用)

当空间不足的时候,Memcached会优先使用已经过期的数据空间,如果还不够,那么就会把最近最少使用的对象的空间释放出来使用。

 懒惰删除机制

删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,下次分配的时候直接使用要特别注意:Memcached的LRU不是全局的,而是针对slab的,可以说是区域性的

每个slab进行lru

时间: 2024-10-21 13:20:33

memcached实战系列(七)理解Memcached的数据过期方式、新建过程、查找过程的相关文章

memcached实战系列(六)理解Memcached的数据存储方式

Memcached的数据存储方式被称为Slab Allocator,其基本方式是: 1:先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题.启动参数的时候配置进去的不懂得可以参考memcached启动参数配置章节. 分配给Slab的内存空间被称为Page,默认是1M.一个Slab下可以有多个Page. 2:然后把一个Page分成很多个chunk块,chunk块是用于缓存记录的空间.Chunk的 大小是先有一个基本值,然后根据增长因子来增大.每一个page中chunk是相等的

高并发之Memcached实战第10课-“Memcached Get获取数据”部分代码分享2

高并发之Memcached实战第10课-"Memcached Get获取数据"部分代码分享2 一.Memcached客户端读写在同一个程序的逻辑: MemcachedClient mcc = new MemcachedClient(list); if(mcc.get("something")==null) { if(!DataFactory.Exist(somethingObject)) { DataFactory.StoreInDB(somethingObject

将同时推出“高并发之Redis初级”“高并发之Redis高级”“高并发之Memcached实战”系列课程

将同时推出"高并发之Redis初级""高并发之Redis高级""高并发之Memcached实战"系列课程,敬请关注,谢谢!   "高并发之Redis初级":http://edu.csdn.net/course/detail/482 "高并发之Redis高级":http://edu.csdn.net/course/detail/483 "高并发之Memcached实战": http://e

艾伟:memcached全面剖析–2.理解memcached的内存存储

本系列文章导航 memcached完全剖析–1. memcached的基础 memcached全面剖析–2.理解memcached的内存存储 memcached全面剖析–3.memcached的删除机制和发展方向 memcached全面剖析–4. memcached的分布式算法 memcached全面剖析–5. memcached的应用和兼容程序 asdfaaf asdfsaf 下面是<memcached全面剖析>的第二部分. 发表日:2008/7/9 作者:前坂徹(Toru Maesaka)

xen虚拟化实战系列(七)之xen虚拟机VNC访问配置

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1286408 xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装xen虚拟化实战系列(二)之xen虚拟机安装xen虚拟化实战系列(三)之xen虚拟机复制xen虚拟化实战系列(四)之xen虚拟机扩展磁盘空间一法xen虚拟化实战系列(五)之xen虚拟机扩展磁盘空间再一法xen虚拟化实战系列(六)之x

memcached实战系列(二)memcached参数以及启动

memcached启动的时候配置的参数也比较多.在这里我就做一个汇总,需要的时候直接查看参数以及参数的含义. 下面是参数的定义以及解释. 1.1.1. 参数说明 -d选项是启动一个守护进程 -m是分配给Memcache使用的内存数量,单位是MB,这里是10MB -u是运行Memcache的用户,这里是root -l是监听的服务器IP地址,这里指定了服务器的IP地址192.168.1.106如果是多个的话逗号分隔,格式IP地址:端口号 例如-l指定192.168.0.184:19830,192.1

memcached实战系列(三)memcached命令使用

memcached命令的使用,在这里我们最好了解一下命令的含义,对命令有一个大致的了解,在了解的基础上进行使用.这里的命名是常用的crud命令的演示. 1.1.1. memcached命令的格式 标准协议:Memcached所有的标准协议包含在对item执行命令过程中,一个item包含两行: 第一行:Key Flags ExpirationTime Bytes Key:Key 用于查找缓存值 Flags:一个32位的标志值,客户机使用它存储关于键值对的额外信息(譬如用户规定1 json 2 xm

memcached实战系列(四)memcached stats命令 memcached优化

memcached提供一系列的命令进行优化的查看,方便我们调整我们的存储策略,查看我们的使用率,内存的使用率以及浪费情况.常用的命令有stats.stats settings.stats items.stats slabs 1.1.1. memcached  stats命令 memcached  stats命令主要是查询服务器的运行状态和其他内部数据,包含如下这些: 1:pid :服务器进程ID 2:uptime :服务器运行时间,单位秒 3:time:服务器当前的UNIX 时间 4:versi

memcached实战系列(五)Memcached: List all keys 查询所有的key

memcached可能当时设计的时候就把它定位为内存性的kv结构的缓存系统.所以没有持久化到磁盘的命令,也没有查看所有key的值得命令.可能觉得没必要吧,你要是缓存1个G内存的数据,自己都头大,还敢看.但是近期确实需要查看商城的数据所有值,于是乎研究了一下.还别说还真有这个命令,只是隐藏的深而已. 需要还是连接到我们的服务器吧. telnet 127.0.0.1 18887 stats items命令如下:看以参考之前的命令文章看具体的使用.效果如下:   这个命令告诉我们有三个key在这个卡槽