首先启动一个memcached实例。
memcached -p 11211 -m 15m -vvv -u robinzhu -f 2
用stats查看下缓存状态:
STAT pid 24675
STAT uptime 26
STAT time 1369547076
STAT version 1.4.7
STAT libevent 2.0.12-stable
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.004000
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 15728640
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
STAT reclaimed 0
END
现在缓存为空。
以非压缩的方式向缓存中写入30个100k的相对大数据对象。总共3m数据。
查看stats
stats
STAT pid 24675
STAT uptime 3202
STAT time 1369550252
STAT version 1.4.7
STAT libevent 2.0.12-stable
STAT pointer_size 32
STAT rusage_user 0.064004
STAT rusage_system 0.092005
STAT curr_connections 10
STAT total_connections 12
STAT connection_structures 12
STAT cmd_get 1
STAT cmd_set 30
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 1
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 3075555
STAT bytes_written 1060
STAT limit_maxbytes 15728640
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 3076580
STAT curr_items 30
STAT total_items 30
STAT evictions 0
STAT reclaimed 0
END
查看slab的状态:
stats slabs
STAT 12:chunk_size 163840
STAT 12:chunks_per_page 6
STAT 12:total_pages 5
STAT 12:total_chunks 30
STAT 12:used_chunks 30
STAT 12:free_chunks 0
STAT 12:free_chunks_end 0
STAT 12:mem_requested 3076580
STAT 12:get_hits 0
STAT 12:cmd_set 30
STAT 12:delete_hits 0
STAT 12:incr_hits 0
STAT 12:decr_hits 0
STAT 12:cas_hits 0
STAT 12:cas_badval 0
STAT active_slabs 1
STAT total_malloced 4915200
END
可以看到,总共存储进去30个对象
接着向里面存进100个大小为100k的对象。
stats
STAT pid 24675
STAT uptime 4010
STAT time 1369551060
STAT version 1.4.7
STAT libevent 2.0.12-stable
STAT pointer_size 32
STAT rusage_user 0.080005
STAT rusage_system 0.152009
STAT curr_connections 11
STAT total_connections 14
STAT connection_structures 13
STAT cmd_get 2
STAT cmd_set 130
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 2
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 13327396
STAT bytes_written 4356
STAT limit_maxbytes 15728640
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 9845082
STAT curr_items 96
STAT total_items 130
STAT evictions 4
STAT reclaimed 0
END
可以看到只存进去96个对象。
查看slab的情况:
stats slabs
STAT 12:chunk_size 163840
STAT 12:chunks_per_page 6
STAT 12:total_pages 16
STAT 12:total_chunks 96
STAT 12:used_chunks 96
STAT 12:free_chunks 0
STAT 12:free_chunks_end 0
STAT 12:mem_requested 9845082
STAT 12:get_hits 0
STAT 12:cmd_set 130
STAT 12:delete_hits 0
STAT 12:incr_hits 0
STAT 12:decr_hits 0
STAT 12:cas_hits 0
STAT 12:cas_badval 0
STAT active_slabs 1
STAT total_malloced 15728640
END
所以只有个slab class因为我们存进去的对象都是同样大小的大对象:
这样我已经对该memcached缓存做了内存划分:
现在存入14000个小对象。
stats slabs
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 13107
STAT 1:free_chunks 0
STAT 1:free_chunks_end 0
STAT 1:mem_requested 877383
STAT 1:get_hits 0
STAT 1:cmd_set 38214
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 12:chunk_size 163840
STAT 12:chunks_per_page 6
STAT 12:total_pages 16
STAT 12:total_chunks 96
STAT 12:used_chunks 0
STAT 12:free_chunks 96
STAT 12:free_chunks_end 0
STAT 12:mem_requested 0
STAT 12:get_hits 0
STAT 12:cmd_set 38344
STAT 12:delete_hits 0
STAT 12:incr_hits 0
STAT 12:decr_hits 0
STAT 12:cas_hits 0
STAT 12:cas_badval 0
STAT active_slabs 2
STAT total_malloced 16777200
END
原有的内存分配没有改变,内存浪费了。所以这就是memcached的特殊内存分配方式,开始根据存入数据建立的内存slab格局不会在得到调整,所以,就有对内存浪费的隐患。
相关推荐
基于FPGA的Memcached加速研究指的是利用FPGA的可编程特性来提升Memcached这一高性能内存键值缓存系统的性能。Memcached本身作为一款在Web服务中广泛部署的内存对象缓存系统,能够显著提升服务质量,但在传统x86架构...
通过案例研究,我们可以了解到如何在服务器配置、数量、memcached进程管理、客户端使用方法等方面进行优化。此外,memcached的兼容性也让它能够适用于多种不同的应用程序,比如Tokyo Tyrant。 总结而言,memcached...
【描述】"memcached-笔记资料"暗示了本资料主要包含关于Memcached的使用、配置、优化和实践经验,可能涵盖了基础概念、安装步骤、命令行操作、最佳实践等多方面的内容。 【标签】"memcached"明确指出了讨论的主题,...
【Memcached 应用研究】 Memcached 是一种广泛使用的分布式内存对象缓存系统,由 danga.com 开发,主要用于缓解数据库负载,提升动态 Web 应用的性能。该技术的出现源于对数据访问效率的追求,因为在大多数情况下,...
- **关于二进制协议**:memcached引入了二进制协议以提高性能和安全性。 - **二进制协议的格式**:二进制协议定义了一种更紧凑、更高效的数据传输格式。 - **HEADER中引人注目的地方**:二进制协议中的消息头包含了...
“memcached安装及java应用使用memcached”这一标题暗示了我们要讨论的是一个关于分布式内存缓存系统——memcached的安装过程以及如何在Java应用程序中使用它。Memcached是一个高性能、轻量级的分布式内存对象缓存...
7. **案例研究**:通过实际例子演示memcached在实际应用中的配置和使用。 通过这两个文件的学习,可以深入理解memcached的内部工作机制,为优化和自定义memcached提供理论基础,或者帮助开发者在类似项目中应用...
Memcached-1.49版本是这个系统的特定发行版,包含源代码,供开发者研究、学习和定制。了解Memcached的核心原理和功能,对于优化网站性能、提升用户体验至关重要。 1. **分布式缓存**:Memcached基于键值对(key-...
通常我们是把memcached安装运行在web服务器上,然后通过对需要的数据进行缓存,据我目前所知,所有数据的缓存设置和存取操作,以及数据的更新后替换操作全部需要程序来进行,而不是自动进行的(自动不知道能不能成功...
通过深入研究`memcached1.4.5`的源代码,我们可以了解到分布式缓存系统的内部运作机制,这对于理解和优化类似系统、开发自己的内存缓存服务有着极大的价值。同时,这也有助于提升对网络编程、内存管理和并发处理的...
为了实现更高效、安全的缓存策略,你可以进一步研究Memcached的特性,如CAS(Compare and Swap)操作、持久化、分布式哈希等。同时,了解如何在大型分布式系统中优化Memcached的配置和使用,以充分发挥其性能优势,...
- **关于二进制协议**:二进制协议提供了更高效的通信方式,减少网络传输开销。 - **HEADER中引人注目的地方**:二进制协议的HEADER部分包含关键元数据,如命令类型、数据长度等。 - **外部引擎支持**:允许使用第三...
通过深入研究`decode-memcached-master`源码,我们可以了解到`memcached`是如何实现高效、可靠的缓存服务的。它将内存管理、网络通信、数据结构和算法巧妙结合,提供了简洁但强大的功能。对于理解和开发分布式缓存...
描述中提到,这个编译版本是出于公司需求而自行研究完成的,意味着这可能是一个针对Windows平台的非官方编译,对于那些希望在Windows环境中运行memcached而又找不到现成安装包的用户来说,这将是一个宝贵的资源。...
关于memcached的数据删除机制,它采用了一种称为LazyExpiration的策略,即不会立即删除过期数据,而是等到空间不足需要重新使用时才会清理。此外,memcached支持使用最近最少使用(LRU)策略来有效删除缓存数据,以...
memcached 在 PHP 下应用研究 memcached 是一种高性能的分布式内存对象缓存系统,能够有效应对Web应用中数据库负载的相关问题。在 PHP 下应用memcached,可以通过减少对数据库的读取次数,提高网站的整体响应速度。...
Memcached封装库是一种针对C#开发的工具,用于简化对Memcached分布式缓存系统的操作。Memcached是一款高性能、分布式...通过简单的配置和丰富的API,开发者可以快速集成缓存功能,而无需深入研究复杂的分布式系统细节。
**Memcached 概述** Memcached 是一个高性能、分布式内存对象缓存系统,它用于临时存储数据以减轻数据库的负载。...通过深入研究其源代码,开发者还可以了解其内部机制,进一步优化和扩展其功能。
- **关于二进制协议**:MemCached 支持更高效、更安全的二进制协议。 - **二进制协议的格式**:包含 HEADER 和 BODY 两部分。 - **HEADER 中引人注目的地方**:包含命令类型、关键字长度、额外数据长度等信息。 - **...