Memcached的内存分配以page为单位,默认情况下一个page是1M,可以通过-I参数在启动时指定。如果需要申请内存时,memcached会划分出一个新的page并分配给需要的slab区域。page一旦被分配在重启前不会被回收或者重新分配(page ressign已经从1.2.8版移除了)
Slabs划分数据空间
Memcached并不是将所有大小的数据都放在一起的,而是预先将数据空间划分为一系列slabs,每个slab只负责一定范围内的数据存储。如下图,每个slab只存储大于其上一个slab的size并小于或者等于自己最大size的数据。例如:slab 3只存储大小介于137 到 224 bytes的数据。如果一个数据大小为230byte将被分配到slab 4中。从下图可以看出,每个slab负责的空间其实是不等的,memcached默认情况下下一个slab的最大值为前一个的1.25倍,这个可以通过修改-f参数来修改增长比例。
Chunk才是存放缓存数据的单位
Chunk是一系列固定的内存空间,这个大小就是管理它的slab的最大存放大小。例如:slab 1的所有chunk都是104byte,而slab 4的所有chunk都是280byte。chunk是memcached实际存放缓存数据的地方,因为chunk的大小固定为slab能够存放的最大值,所以所有分配给当前slab的数据都可以被chunk存下。如果时间的数据大小小于chunk的大小,空余的空间将会被闲置,这个是为了防止内存碎片而设计的。例如下图,chunk size是224byte,而存储的数据只有200byte,剩下的24byte将被闲置。
Slab的内存分配。
Memcached在启动时通过-m指定最大使用内存,但是这个不会一启动就占用,是随着需要逐步分配给各slab的。
如果一个新的缓存数据要被存放,memcached首先选择一个合适的slab,然后查看该slab是否还有空闲的chunk,如果有则直接存放进去;如果没有则要进行申请。slab申请内存时以page为单位,所以在放入第一个数据,无论大小为多少,都会有1M大小的page被分配给该slab。申请到page后,slab会将这个page的内存按chunk的大小进行切分,这样就变成了一个chunk的数组,在从这个chunk数组中选择一个用于存储数据。如下图,slab 1和slab 2都分配了一个page,并按各自的大小切分成chunk数组。
Memcached内存分配策略
综合上面的介绍,memcached的内存分配策略就是:按slab需求分配page,各slab按需使用chunk存储。
这里有几个特点要注意,Memcached分配出去的page不会被回收或者重新分配Memcached申请的内存不会被释放slab空闲的chunk不会借给任何其他slab使用
Memcached内存释放
Lazy Expiration
memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。
LRU:从缓存中有效删除数据的原理
memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。
相关推荐
- 分布式:Memcache可以跨多台服务器分配数据,实现负载均衡。 - 键值对存储:Memcache以键值对的形式存储数据,便于快速查找。 - 数据过期机制:支持设置数据的生存时间,超过该时间后数据会被自动删除。 - ...
- 内存管理:Memcache在内存中分配空间,创建一个哈希表来存储数据。这种设计使得数据存取速度极快,因为避免了磁盘I/O操作。 - 非阻塞网络I/O:Memcache使用非阻塞的网络I/O模型,能够同时处理大量连接请求,提高...
Memcache的配置选项包括监听端口、连接IP地址、启动/重启/停止/卸载服务、运行用户、内存使用上限、最大连接数、内存分配块大小和最小分配空间等。例如,“-p”用于设定监听端口,“-l”用于设置连接的IP地址,而“-...
虽然Memcache默认在11211端口上运行,但你可以根据需要调整端口和内存分配等参数。例如,设置分配128MB内存: ``` C:\memcached\memcached.exe -m 128 -p 11211 -l 127.0.0.1 ``` 7. **测试安装** 安装完成后...
3. **启动服务**:分配一定量的内存,并启动Memcache服务: ```bash memcached.exe -m 300MB -d start ``` 4. **连接测试**:通过telnet工具连接到本地Memcache服务,端口号为11211: ```bash telnet 127.0.0.1...
- 适当调整 Memcache 的最大连接数、内存分配等参数,以适应服务器资源和应用需求。 - 对于大型数据,考虑分片存储,避免单个键值过大导致的性能下降。 - 使用合适的过期时间,避免无效数据占用内存。 - 结合...
例如,如果你想设置分配给Memcache的内存为128MB,并监听11211端口,可以在启动时指定: ``` memcached.exe -m 128 -p 11211 -d start ``` 6. 在PHP中测试: 安装并配置好PHP的Memcache扩展后,你可以编写一个...
运行`memcached.exe`,通常选择静默安装,并指定一些配置选项,如端口(默认为11211)、内存分配大小等。安装完成后, Memcache服务会在后台运行,提供缓存服务。 2. **配置Memcache服务**: 打开服务管理器,找到...
7. **性能优化**:可以通过调整Memcache服务器的配置参数,如最大连接数、内存分配等,优化其性能。 8. **分布式缓存**:Memcache支持多服务器环境,可以分散负载,提高系统的可伸缩性和可靠性。 在PHP 5.4中使用...
4. **内存管理**:Memcache通过内存池管理内存,避免了频繁的内存分配和释放操作,提高了性能。 5. **TCP/IP 协议**:使用简单的文本协议,易于实现和调试,同时也支持多语言客户端库。 6. **扩展性**:可以通过增加...
根据实际需求调整内存分配、超时设置等参数,优化缓存效果。 总之,`memcache`在Win7 64位系统的安装涉及解压、安装服务、配置参数等多个步骤。正确安装和配置后,它可以显著提升Web应用程序的性能,减少对数据库的...
如果内存使用过高,可能要考虑增大Memcache的内存分配或者优化存储的数据。 总的来说,Memcache监视工具为Windows环境下的Memcache管理提供了便利,通过可视化的方式,让开发者和运维人员更好地理解和优化缓存系统...
- **分片技术**:通过在多个Memcache服务器间分配数据,提高系统的可用性和并发处理能力。 - **缓存预热**:在应用启动时预先加载常用数据,减少首次访问时的延迟。 - **缓存失效策略**:合理设置过期时间,避免...
MemCache是一种广泛应用于Web开发中的高性能分布式内存对象缓存系统,其主要目的是通过将数据存储在内存中...在实际应用中,合理地分配和管理缓存数据,以及调整MemCache的内存大小和过期策略,是优化系统性能的关键。
- 配置Memcache时,考虑合理的内存分配、过期策略以及负载均衡。 综上所述,"win下php-memcache5.4;5.2;5.3扩展和memcache服务端"涵盖了从下载PHP扩展到安装配置Memcache服务端的整个过程,确保了PHP应用程序能够...
优化包括调整内存分配、平衡客户端负载和优化数据结构以提高查找效率。 值得注意的是,当内存达到最大值且`-M`选项设置为启用时,Memcache不会自动删除旧数据,而是拒绝新数据的写入。若希望在内存不足时自动删除旧...
3. **stats slabs**: 显示slabs信息,用于了解内存分配情况。 4. **stats malloc**: 查看更高级的内存分配统计数据。 5. **stats items**: 查看每个item的统计信息。 6. **stats detail**: 输出详细的统计信息。 7. ...
4. **性能优化**:理解Memcache的工作机制,如数据过期策略、内存分配策略等,可以帮助开发者优化缓存效果,提高系统性能。 5. **分布式缓存**:当单个Memcache服务器不足以应对高并发或大数据量时,可以采用分布式...
windows memcache 安装服务,php_memcache.dll所有版本扩展dll 安装说明 在命令行下安装Memcache,输入 ‘c:/memcached/memcached.exe -d install’。...-n 最小分配空间,key+value+flags默认是48 -h 显示帮助