`

memcached结构

 
阅读更多

结构简介:每个作业本(memcached的内存空间),它都有很页(slab),每一页里面有很多方格子(trunk),每个格子里面可以写字(item)。

上面说到的格子本的一页纸,就一个是slab, 是memcached分配的一块内存空间,默认大小为1M。memcached会将内存空间分配成一个一个的slab,还会把一个slab分割成一个一个的格子,也就是一个一个chunk,比如说1M的slab分成两个0.5M的chunk,slab和chunk其实都是代表实质的内存空间,chunk是slab分割后的更小的单元。所以:slab就相当于作业本中的“一页纸”,而chunk则是把这一页纸中的一个个的“格子”。

 

 

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重要结构.doc

    Memcached重要结构

    memcached全面剖析.pdf

    memcached全面剖析,讲述了memcached的原理,架构以及简单的案列分析

    LinQ to Memcached with SQL Server Change Tracking

    3.性能测试、通信数据结构设计 4.SQL Server Change Tracking了解并应用 5.SQL Server Change Tracking集成Memcached 6.项目应用(IM基础数据缓存,例:Category、Brand、Manufacturer等) 7.了解Memcached实现机制...

    memcached源代码分析

    memcahced源代码分析,两个文件 1个是基本数据结构(.txt) 1个是分析ppt

    基于memcached的云缓存ARCUS.zip

    Arcus 支持多种数据机构 (List, Set, B tree),除了支持基本的memcached 键值数据模型,还可以一个结构化的形式存储和回取多个数值。 Arcus 管理多个使用 ZooKeeper 的 memcached 节点集群。每个集群或云由它的...

    数据平台缓存技术方案Memcached-Redis[汇编].pdf

    Slab 内存结构图和分配实例图分别展示了 Memcached 的内存管理机制。 Memcached 的客户端算法使用余数分散法,根据服务器台数的余数进行分散,求得 Key 的整数 Hash 值 H,除以服务器的台数 N,由余数指向选中...

    memcached帮助文档

    自己整理的memcached文档,用于学习memcached。里面带有完整的数据结构信息说明以及函数关系图显示,非常适合开发手头查看手册。

    Memcached incr 与 decr 命令

    Memcached incr 与 decr 命令 Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。...key:键值 key-value 结构中的 key,用于查找缓存值。 increment_value: 增加的

    Memcached get 命令

    key:键值 key-value 结构中的 key,用于查找缓存值。 实例 在以下实例中,我们使用 runoob 作为 key,过期时间设置为 900 秒。 set runoob 0 900 9 memcached STORED get runoob VALUE runoob 0

    Memcached delete 命令

    key:键值 key-value 结构中的 key,用于查找缓存值。 noreply(可选): 该参数告知服务器不需要返回数据 实例 在以下实例中,我们使用 runoob 作为 key,过期时间设置为 900 秒。之后我们使用 delete 命令删除该 ...

    CakePHP-Memcached-Engine:CakePHP 的 Memcached 存储引擎,使用 memcached 扩展

    igbinary 以紧凑的二进制形式存储 php 数据结构,而不是耗费时间和空间的文本表示。 当使用 memcached 或类似的基于内存的存储来存储序列化数据时,节省是很重要的。 您可以预期存储需求减少约 50%,速度至少与标准...

    Memcached CAS 命令

    Memcached CAS 命令 Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个”检查并设置”的操作 它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的...key:键值 key-value 结构

    Nginx+Keepalived+Tomcat+Memcached 实现双VIP负载均衡及Session会话保持.txt

    memcached是一个用C语言开发的分布式的缓存,内部基于类似hashMap的结构。它的优点是协议简单,内置内存存储,并且他的分布式算法是在客户端完成的,不需要服务器端进行通信,我们当时在做项目的时候因为考虑到项目...

    Memcached常用命令以及使用说明详解

    存储命令的格式:<command> <key> <flags> ...存储的数据块(可直接理解为key-value结构中的value)1、添加 (1)、无论如何都存储的set 这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果

    易语言Memcached协议客户端模块

    易语言Memcached协议客户端模块源码系统结构:Initialize,Connect,Timeout,Exptime,IsRunning,RunStorageCommand,AnalyzeMessage,Set,Add,Replace,Delete,Incr,Decr,Version,Get,GetMulti,AnalyzeReturnDatas,Run...

    Memcached常用命令及使用说明

    一、存储命令 存储命令的格式: <command> <key> <flags> <exptime> <bytes> 参数说明如下: set/add/replace ...存储的数据块(可直接理解为key-value结构中的value) ...这个set的命令在memcached中的使用

    memcached:memcached开发树

    仅在x86-64体系结构上进行了测试。 openssl(可选)-启用TLS支持。 需要相对最新的版本。环境请注意,使用大型缓存时,memcached的-k(mlockall)选项可能很危险。 只要确保内存缓存的机器不交换即可。 memcached...

    Memcached 分布式缓存实现原理简介

    无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数,最常见的有redis和memcached等,既然是分布式,那么他们是怎么实现分布式的呢?本文主要介绍分布式缓存服务mencached的...

    docker-hub-memcached:这是在Docker Hub托管的CI&T Memcached Docker映像的源代码-docker source code

    Acquia在链接上发布了一个表格,其中包含其平台基础结构信息: : 这些图像将具有以下名称模式: acquia- YYYY-MM-DD 这些是通过标签捆绑在映像中的当前软件版本。 acquia-latest或acquia-2016-11-

Global site tag (gtag.js) - Google Analytics