Memcached在大型网站建设中的应用
2016-03-22周建儒
周建儒
摘要: 缓存技术在web开发中应用广泛,合理的缓存技术可以减轻服务器负担,提升系统性能,尤其在大型网站建设中,使用Memcached缓存技术能够有效地增强系统的缓存性能。在分析Memcached的原理与特征的基础上,结合实际项目探讨了Memcached在大型网站中如何应用。
关键词: 大型网站;缓存技术;Memcached
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)01-0057-03
Memcached Used in the Construction of Large Sites
ZHOU Jian-ru
(Sichuan Information Technology College, Guangyuan 628040,China)
Abstract: Caching technology widely in web development application, reasonable caching technology can reduce server load, improve system performance, especially in large-scale construction site, using Memcached caching technology can effectively enhance the performance of the system cache. In the analysis of the principles and characteristics of Memcached on the basis of the actual project explores how Memcached applications in a large site.
Key words: Large sites; caching; Memcached
随着现代互联网技术的快速发展,应用系统的复杂度增大、数据量不断增长、高并发请求增多,服务器的负担也随之加重,数据库响应速度变慢,网页显示延迟等这些问题也越发突出。数据缓存技术成为解决这些问题的主要途径。缓存技术已经成为一个并发访问量大的应用系统不可缺少的关键技术,缓存方案设计的好坏直接关系到网站访问的速度。目前,很多的大型网站都使用 Memcached来支持海量级的页面访问量。通过把 cache 层与Web 架构集成,可以提高应用程序的性能,并降低数据库的负载。
1 Memcached简介
Memcaehed是danga.com的一个项目,开发Memcaehed的目的是为了提高LiveJournal的访问速度,以后逐渐被应用在大型网站建设中。
Memcached是一个免费开源的、高性能的、分布式的内存对象缓存系统,用于在动态 Web 应用中提升访问速度[1],可以满足不同主机上的多个用户同时访问该缓存系统。Memcached通过在内存中维护一个统一的hash表来管理缓存数据,它和数据库是独立的,用户无需知道数据存在何处。Memcached可以存储各种类型的数据(例如文件、视频、图像等),它不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度[3]。
2 Memcached工作原理
Memcached技术是一个数据缓存的工具,常应用于Web应用中,主要目的是提升访问速度,同时减轻数据库负载。Memcached缓存技术是在内存中缓存数据和对象,客户端应用可以直接从缓存中读取数据,这样就避免了频繁读取数据库,从而提高网站的响应速度。Memcached缓存技术是基于一个存储键-值对的hashmap,客户端应用通过Memcached协议与守护进程通信。Memcached并不提供冗余,当某个服务器停止运行或崩溃了,所有存储在该服务器上数据就消失了。Memcached工作原理如图1所示,图中细线箭头表示首次访问页面时从RDBMS中取得数据保存到Memcached中,粗线箭头表示第二次以后访问页面时从Memcached中取数据显示[4]。
图1 Memcached与数据库协同工作原理
3 Memcached的主要特征
Memcached是一种分布式的用于数据缓存的服务器,它的特征如下。
(1) 内置的内存管理方式
为了提高性能,Memcached中保存的数据都存储在它内置的内存存储空间中,当存储的数据量达到预设容量值之后,可以通过LRU淘汰算法,或者通过删除和设置失效时间来自动删除内存中的数据。Memcached本身是为缓存而设计的服务器,不能持久保存数据,由于数据仅存在于内存中,因此重启服务器或者Memcached进程中止数据就会丢失。
(2) 分布式
Memcached服务器端没有分布式的功能,仅有存储功能,其分布式是由客户端程序实现的[2]。Memcached服务器是独立的存取数据的,多个服务器之间不会共享数据,也互不通信。可以在多台服务器上安装Memcached来组建一个缓存服务器集群,通过hash来分散存储,存储位置只与关键字相关,这样就可以减轻数据库的响应压力,并且它具有故障测试,负载分配等功能。
4 Memcached的应用
Memcached作为缓存服务器,其应用场景主要是针对一些访问量大的应用系统,比如电子商务网站,其网站首页必定有一个商品分类导航栏,当点击某个具体分类时,其网页就加载该类别的商品。实现该功能,一般的做法就是执行SQL语句,查询出全部的商品分类并显示在页面上,当访问量很多的时候,每打开一次网页,就要去执行一次SQL语句,这就增加了数据库的连接数,当访问量到达一定数量时,就很可能使数据库崩溃,甚至让系统瘫痪。在这种情况下,如果使用缓存技术,就可以有效避免这种事情的发生。因为商品分类作为导航栏是不会经常改变的,实时性不是很高,这样我们就可以把商品分类放到缓存中。其解决方案为,加入Memcached缓存,首先第一次显示的时候,判断Memcached缓存中是否有该商品分类,如果没有,执行一次SQL语句,从数据库中查询所有的商品分类,然后放到Memcached中,进入处理数据并显示页面。当第二次进行访问时,Memcached缓存中就有了该商品分类的数据,就可以直接从Memcached中取出数据进行处理并显示到页面上,不需要再次执行SQL语句从数据库中去读取数据,这样便减少了数据库的连接和访问时间。
Memcached的应用主要分为Memcached服务器端的安装配置和客户端使用。服务器端主要和应用服务器(比如:Tomcat)安装在同一台机器上,客户端使用主要是程序代码的调用和存储。
4.1 服务器安装
在此以Windows系统的服务器为例介绍Memcached的安装。首先下载Memercached For Windows并解压,然后直接运行 memcached.exe 或者用cmd打开命令窗口,转到解压文件所在的目录,输入命令memcached.exe -d install执行,结束后在控制面板中打开服务,可以看到Memcached了,如果没有启动就手动启动。
4.2 客户端应用
Memcached作为缓存工具,其客户端程序可以使用多种开发语言来实现,针对Java而言,目前的实现就有三种方法,分别为Memcached Client for Java,SpyMemcached和XMemcached。Memcached Client for Java比SpyMemcached更稳定、更早、更广泛。SpyMemcached比 Memcached Client for Java更高效。XMemcached比 SpyMemcache并发效果更好。所以对访问量高的电子商务网站而言,采用并发效果好的XMemcached来实现客户端是比较好的选择。以下就以一个具体的项目为例进行说明,该项目是一个商业项目的demo,使用maven进行管理,采用struts2+spring+mabatis架构,将Memcached与spring进行了集成。该项目架构如图2所示。
图2 项目架构
首先通过maven将xmemcached-2.0.0.jar包导入项目,再将Memcached与spring集成,在spring配置文件中进行如下配置,核心代码如下所示。
4.3 在业务层使用Memcached
Memcached 用于功能接口的定义,在业务层可以直接使用,可以屏蔽各种客户端实现API之间的差异,从而实现业务系统与客户端解耦合的目的,如果以后要换客户端的实现,对业务系统不会有影响。核心代码如下所示。
public String selectUser(HttpServletRequest request,Model model) throws TimeoutException, InterruptedException, MemcachedException{
Long tr = new Date().getTime();
Map param = new HashMap();
List
user = (List) memcachedClient.get("userList");
if(user == null) {
user = serviceManager.getUserManagerService().selectUser(param);
memcachedClient.set("userList", 0, user);
}
model.addAttribute("userList", user);
Long tq = new Date().getTime();
Long tp = tq - tr ;}
上述代码在运行过程中,当加入缓存后,其信息展示的速度会有明显的提升。
5 总结
Memcached在高并发的数据查询系统中发挥良好的性能,因为访问Memcached中的内存数据要比数据库的磁盘数据快很多。
文中主要探讨了Memcached主要特征以及在大型网站中如何应用。在网站建设中使用Memcached之后,可以减少数据库连接、查询等操作,降低了数据库负载。系统的运行速度提高了,优化了网站的性能。
参考文献:
[1] 郭栋,王伟.基于Memcached的缓存资源集中管理方法[J].计算机技术与发展,2013(12):62-65.
[2] 邓磊,吴健.电子政务中跨域可信数据交换模型设计与实现[J].计算机工程,2007,33(12):4-6.
[3] 俞华锋.Memcached在大型网站中的应用[J].科技信息,2008(1):70-71.
[4] 宗小忠.基于Memcached构建Web缓存服务器[J].电脑知识与技术,2011(5):104-105.