结构、简介:每个作业本(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是一款高性能、分布式内存对象缓存系统,最初由Danga Interactive开发,用于减少数据库负载,通过缓存数据和对象来加速Web应用程序。它以key-value的形式存储数据,支持多种编程语言,如Perl、PHP、Python...
Memcached 的重要结构主要体现在其内部的数据结构和连接管理上。以下将详细阐述 Memcached 的核心结构。 1. `conn` 结构体是 Memcached 中的核心连接管理结构,用于维护客户端与服务器之间的通信状态。`conn` ...
- `connection_structures`: 服务器分配的连接结构数。 - `version`: Memcached的版本号。 - `limit_maxbytes`: 分配给Memcached的内存大小(以字节为单位)。 - `cmd_get`: get命令的总请求次数。 - `...
Memcached 的主要特点包括简单的键值对存储、内存优化的数据结构以及基于内存的缓存机制,适用于处理大量临时数据。 **Redis** 相比之下,Redis 是一个更全面的、支持更多数据结构的键值存储系统。除了基本的键值对...
2. **源码结构** - `memcached-1.5.4`源码包含多个主要目录:`src`存放核心代码,`doc`包含文档,`test`有测试用例,`config`存储配置脚本,`include`包含头文件等。 3. **编译与安装** - 首先,确保系统已经安装...
### Memcached源代码分析 #### 一、Memcached概述与...通过对Memcached源代码的深入剖析,我们可以学习到其在内存管理、网络通信、数据结构设计等方面的优秀实践,这对于提升个人技术能力和项目开发效率具有重要意义。
1. **Tokyo Cabinet**:一个日本开发的键值对存储系统,提供了多种数据结构,如B+树和哈希表,适用于持久化存储。 2. **MemcacheDB**:由新浪开源团队开发,它提供了一个更持久化的解决方案,可以在内存不足时将数据...
3. **源码结构分析** 解压后的"memcached工具类源码"可能包含以下部分: - **Memcached客户端连接器**:初始化和管理到Memcached服务器的连接,如建立Socket连接,处理心跳机制,保持会话活跃。 - **Key-Value...
- `connection_structures`: 服务器分配的连接结构数。 - `version`: Memcached版本。 - `limit_maxbytes`: 分配给Memcached的内存大小。 - `cmd_get`: GET命令总请求次数。 - `evictions`: 为获取空闲内存而删除的...
- 哈希映射:对于复杂的数据结构,可以使用哈希映射存储,如`Map, Object>`。 - 序列化:默认情况下,只有基本类型和字符串可以直接存入Memcached。对于自定义对象,需要实现`Serializable`接口或使用第三方序列化...
在特定情况下,可能会考虑使用Redis这样的更全面的缓存解决方案,它支持更多的数据结构和持久化选项。 总结,Memcached 1.5.11版作为一款轻量级的缓存系统,以其高效、易用的特点在众多项目中得到了广泛应用。通过...
STAT connection_structures 318 服务器分配的连接结构的数量 STAT cmd_get 100595 取回请求总数 STAT cmd_set 6510 存储请求总数 STAT get_hits 96543 请求成功的总次数 STAT get_misses 4052 请求失败的总次数 ...
2. libmemcached.dll:这是Memcached的客户端库,包含了与服务器通信的函数和数据结构。开发人员可以使用这个库来与Memcached服务器进行交互,存取数据。 3. cygwin1.dll:这是一个用于在Windows上模拟Linux环境的...
1. **键值对存储**:Memcached基于键值对的数据结构,每个缓存项由一个唯一的键和关联的值组成,键用于标识特定的数据,值则是实际要缓存的内容。 2. **内存存储**:所有数据都存储在内存中,不涉及磁盘操作,因此...
标题"memcached C++ 客户端 源码"表明了这是一个关于使用C++编写的memcached客户端的源代码库。memcached是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。C++客户端则为开发者提供...
- **缓存策略选择**:根据业务需求选择合适的缓存系统,如简单缓存场景可选用Memcached,复杂数据结构或需持久化的场景则考虑Redis。 - **缓存失效策略**:除了LRU外,还可以采用Time-To-Live(TTL)、手动清除等方式...
- **键值对存储**:Memcached支持键值对的数据结构,键用于唯一标识数据,值是实际存储的内容,两者之间用分号隔开。 - **一致性哈希**:为了在分布式环境中实现数据的均衡分配,Memcached通常采用一致性哈希算法,...
这种方式简洁且高效,适合于存储简单的结构化数据。 4. **协议简单**:Memcached使用基于文本的简单协议,允许客户端通过TCP/IP连接与服务器进行交互,如设置、获取、删除等操作,降低了开发难度。 Memcached的应用...