点击查看英文原文
两个勇敢的冒险者,程序员和系统管理员,开始了一段旅程。他们一起搭建一个基于web server和database的网站。网上的用户与web server交互,并请求获得他们所需要的页面。web server请求databases以获得数据来构建页面。在这个项目中,程序员进行编码,而系统管理员负责web server 和database的安装与部署。
某天,管理员发现他们的数据库系统快要跨掉了,几乎也不能负载得起web server的请求了。程序员咨询起管理员该怎么办,这时管理员想起了一个叫memcached的项目,它曾真真切切的使用在livejournal项目中,并取得了很好的效果。程序员高兴的说:“非常好,咱们也试一下吧”。
勇敢的管理员分析下当前的web server,发现已经有了6个web servers。他决定使用其中的三个用为memcached server,并为每个web server添加一个G的内存空间,然后把每个memcached的缓存空间限定为1G,并启动了memcached server。现在,他已经拥有了三个memcached 实例,并且每个都能负载1G的数据容量。这时程序员和管理员开始回过头来并分析如何使用这神奇的memcached。
他们发现memcached还不能正确的工作,因为memcached server里并未缓存任何内容,而当前databases的负载已经更高了。勇敢的程序员拿来了pecl/memcache客户端使用手册,并自信地说“不要担心,我知道怎么办了”。然后取到了三个memcache server的IP地址及端口,并添加到一个php的数组中:如下
$MEMCACHE_SERVERS = array(
"10.1.1.1", //web1
"10.1.1.2", //web2
"10.1.1.3", //web3
);
然后他定义了个Memcache实例,并把上面得到的server加入其中:
$memcache = new Memcache();
foreach($MEMCACHE_SERVERS as $server){
$memcache->addServer ( $server );
}
完成这些工作后,程序员陷入了深思,突然眼睛一亮:“我知道了,在网站的首页上会运行这个SQL'SELECT * FROM hugetable WHERE timestamp > lastweek ORDER BY timestamp ASC LIMIT 5000',但这个语句会耗时5秒钟,我可以把这个查询的结果放到memcached里。”他改变了原有的SELECT语句,并开始使用了$memcache对象,在程序中会判断这个查询是否已经缓存到了memcache server里,如果还没有就到databases里查询并把结果放到memcache里,如下:
$huge_data_for_frong_page = $memcache->get("huge_data_for_frong_page");
if($huge_data_for_frong_page === false){
$huge_data_for_frong_page = array();
$sql = "SELECT * FROM hugetable WHERE timestamp > lastweek ORDER BY timestamp ASC LIMIT 50000";
$res = mysql_query($sql, $mysql_connection);
while($rec = mysql_fetch_assoc($res)){
$huge_data_for_frong_page[] = $rec;
}
// cache for 10 minutes
$memcache->set("huge_data_for_frong_page", $huge_data_for_frong_page, 600);
}
程序员提交了代码,”汗,数据库负载降到了原来的一半。“管理员惊喜的叫喊着。现在网站速度又变得相当快了。”那么,“管理员猜测,”到底发生了什么呢“。”我把数据放到了memcached server里。通过cacti,我看到数据只发送到了一台memchace server上,可我部署了三台memcached server啊“,管理员想着。管理员快速查看ascii protocol并telnet到memcached server的11211端口。
”嗨,'get huge_data_for_front_page'在这吗?“,管理员问道。
这一台memcached server没有回答,第二台也没有回答。即便如此,第三台memchaced server把一堆数据显示在了当前的telnet会话终端上。”这是要查询的数据,“管理员自言自语道,”原来只有一个memcached server会缓存程序的数据“。
管理员感到很困惑,他就到邮件列表上去寻找答案,而他们却一致的回答道:这是一个分部式缓存,正如它所做的,数据只会缓存到一台机器上。但是,这对于应用来说又意味着什么呢,管理员依然很茫然。经过挣扎之后,他决定请程序员再cache一些数据到memcached server里。”让我们看到memcached到底做了些什么,虽然我们是些奇怪的想法,但我们确信能找到答案。“管理员说着。
”呃,这还有一个查询,虽然不太慢,但每秒会有100次请求。也许缓存起来也应该有用的“,程序员说。说着,他说按着上次的做法,把这个查询操作也与memcached结合起来进行了重构。然后他们发现,系统负载又降了不少。
有了上面的效果,程序员对越来越多的查询做了重构。多神奇的东西啊,程序员说,现在DB负载已经降到很低了。
现在,管理员又telnet到这三台memcached server上,此时些三台server都在运行,并且对于每台机器的查询请求,都有结果返回。这下管理员终于放心了,所有的memcached server都在正常的使用。
但是他不解的是程序中的数据是如何映射到memcached server上的呢,也就是说为何有些查询在某个server上没有结果,而在另外一个server有返回呢。”难道就不能把每个key映射到所有的memcached上吗?“管理员想着。
”等一下,我给每个memcached分配了1G内存,也就是说现在我总共可以缓存3G的数据了,而不是1G。呃,原来如此“管理员松了口气。
”但是,web server还在运行,可突然某个memcached server死机了会怎么样?“为了确信会发现什么,管理员把其中一台memcached server给停掉了。这时他再观察DB的负载,稍有上升,但并没有表现出负载压力,同时另外两台memcached server还在运行并有数据传输。”不会太坏,只是一部分的缓存丢失了,另外的memcached server还会有效,不会一下子把所有的请求扔给database。“,管理员想着。终于找着答案了,管理员把网停掉的memcached server重新启动起来了。
经过上面的历险,程序员和管理员继续他们的网站开发,并不停的在应用中使用缓存,而db也不再有压力了。从而每个人都过上了开心的生活。
分享到:
相关推荐
标题"memcached 64位 window"指的是在Windows操作系统上运行的64位版本的Memcached缓存系统。Memcached是一种分布式内存对象缓存系统,广泛用于减轻数据库负载,提高Web应用的性能。由于是64位版本,这意味着它可以...
Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载。它通过在内存中存储数据来提供快速的数据访问,从而提高应用的性能。本篇文章将详细讲解如何安装和配置memcached,...
**Memcached 安装与使用详解** Memcached 是一款高性能的分布式内存缓存系统,用于在Web应用中减轻数据库负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可...
在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...
标题“memcached服务器端memcached.exe 下载”指的是获取memcached服务端的可执行文件,`memcached.exe`是Windows环境下运行memcached服务的程序。这个绿色版的memcached意味着它无需安装,下载解压后即可直接运行,...
标题中的“Windows下memcached+memcached.dll 5.3.8”指的是在Windows操作系统上安装和使用Memcached服务的场景,其中`memcached.dll 5.3.8`是Memcached服务器的一个特定版本的动态链接库文件。Memcached是一款高...
Memcached 是一个高性能的分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的响应速度。在本文中,我们将详细介绍如何安装和配置Memcached,以及如何查询其运行状态。 1. **安装Memcached** - 首先,你...
Python-memcached是Python语言的一个库,用于与Memcached缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。Python-memcached库则...
Memcached是一种分布式内存对象缓存系统,广泛应用于Web应用程序,以提高数据读取速度,减轻数据库负载。在PHP环境中,使用Memcached扩展可以方便地存储和检索数据,尤其适用于处理高并发场景。 `...
**Memcached:高性能分布式内存缓存系统** Memcached是一款开源、高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升应用程序性能。它通过存储数据和对象到内存中,使得频繁访问的数据可以更快...
memcached是一款高性能、分布式内存对象缓存系统,最初由Danga Interactive开发,用于减少数据库负载,通过缓存数据和对象来加速Web应用程序。它以key-value的形式存储数据,支持多种编程语言,如Perl、PHP、Python...
**memcached** 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它将数据存储在内存中,以键值对的形式提供快速的数据检索服务。memcached的设计目标是简洁和...
**memcached-1.5.4源码分析与编译指南** `memcached`是一款高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据存储在内存中,实现快速读取,避免了频繁...
1. **下载Memcached**:首先,你需要从官方网站获取最新版的Memcached源码,或者在Windows环境下,可以直接下载编译好的`memcached.exe`。将`memcached.exe`放在一个方便的位置,例如`C:\Program Files`,并确保该...
**hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统Memcached整合到Hibernate中,作为其二级缓存解决方案。在大型分布式应用中,缓存技术是提高性能的关键,特别是...
标题中的“tomcat8+memcached session共享”指的是在Tomcat 8服务器中利用Memcached进行session共享的技术实践。在分布式系统中,session共享是一个重要的问题,因为用户在访问不同的服务器节点时,需要保持登录状态...
标题中的"memadmin+php_memcached+memcached1.4.5"暗示了这是一个关于内存缓存管理系统、PHP扩展以及memcached服务器的组合。这里的关键技术包括`memadmin`(一个用于管理memcached的工具)、`php_memcached`(PHP...
《深入理解Memcached:基于1.5.11版本的剖析》 Memcached,一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的1.5.11版本,解析其...
### Memcached在Windows环境下的安装与配置详解 #### 一、Memcached的安装与基本配置 Memcached是一款高性能、分布式内存对象缓存系统,用于在动态应用中减少数据库负载,加速页面渲染,通过缓存数据库查询结果和...