Memcached是一个开源的快速分布式缓存框架,它和ehcached等缓存框架相比,具有下面的一些优势:
1、
跨jvm的缓存架。我们知道,在一个jvm进程中,一般情况下的有效内存利用最多为2G,如果你再把数据缓存在项目的jvm进程中,势必造成内存空间的紧
缺,严重的时候会出现堆栈溢出面导致项目终止运行。
2、
集群环境下的缓存框架。Memcached启动后,有自己的独立IP地址及端口号(默认是11211,当然你可以更改),因此,在集群环境下或不同的几个
项目间,都可以访问缓存服务器中的数据,非常的方便。
下面我们一起来看一看笔者在最近的一个项目中,是如何使用memached的。
一、安装memcached缓存服务器
如果你用的是windows服务器系统,请到http://jehiah.cz/projects/memcached-win32/下载,点其中的
exe可执行文件,Memcached就完成了启动,非常的简单。
如果你使用的是linux server,你需要如下的操作(以ubuntu为例):
$ sudo apt-get install memcached(安装)
$ memcached -d -m 50 -p 11211 -u root(启动)
上面命令行参数说明:-m 指定使用多少兆的缓存空间;-p 指定要监听的端口; -u
指定以哪个用户来运行,默认情况下,会在本机的11211端口监听操作连接,你可以通过netstat
–ant查看memcached是否已经正常运行。
你也可以通过修改/etc/default/memcached配置文件,将ENABLE_MEMCACHED=yes,让系统启动时,自动运行
memcached,省去了每次都要手式启动的繁琐步骤。
二、下载memcached的java访问客户端。下载地址:http://github.com/gwhalin/Memcached-Java-
Client/downloads,将压缩包中的java_memcached-release_2.5.1.jar放到你的工程目录中。
如果你是用的PHP,Ruby等,也可在网上找到相应的访问Memcached模块及示例代码。
三、在java程序中的访问。
首先要强调一下,放入memcached中缓存的对象,必须以键值对(key/value)的方式放入,取的时候根据key来取,但memcached有
几个自己的特殊要求:key必须为String,即字符串类型;而要缓存的对象必须要实现Serializable序列化接口。
在英语复读网(www.fudu365.com)的播放器中,当用户将鼠标停留到某个单词上时,系统要弹出该单词的解释及音标,由于项目组在开发时并没有
找到一套合适的词库,我们的解决思路是:当有用户查询时,服务器向第三方翻译网站提交单词,再从返回的结果中解析出单词解释及发音。此查询过程相当费时,
且在网络状态不好时表现不佳,但在当时这也许是最好的解决办法了。
Word对象是我们封装的单词音标及解释对象,该对象实现Serializable接口。当用户查询某个单词时,我们先会在Memcached缓存中查
找,如果没有找到,则向数据库查询,如果数据库中也没有找到,再向第三方翻译网站提交,得到结果后返回给用户后,同时要把该单词存入数据库,同时放入
Memcached缓存,下次有用户查询同样的单词时,效率将会得到非常大的提升。系统得到一个单词翻译的代码如下:
public Word getWordTranslate(String aWord) {
// 先从缓存中取
Word word = getWordFromCache(aWord);
if (word != null) {
return word;
}
//从数据库中取
word = wordDao.getWord(aWord);
if (word != null) {
//放入缓存
MemcachedAdapter.add(aWord, word);;
return word;
}
//从网上查词
word = translateWordFromWebSite(aWord);
if (! "e".equals(tv.getWords())) {
//存入数据库
saveWord(word);
//放入缓存
MemcachedAdapter.add(aWord, word);
}
return word;
}
Memcached操作代码如下,其中的一些连接参数,你可以根据你的情况进行修改。
public class MemcachedAdapter {
protected static MemCachedClient mcc = new MemCachedClient();
static {
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(new String[]{"127.0.0.1:11211"});
Integer[] weights = { 3 };
pool.setWeights( weights );
pool.setInitConn( 5 );
pool.setMinConn( 5 );
pool.setMaxConn( 250 );
pool.setMaxIdle( 1000 * 60 * 60 * 6 );
pool.setMaintSleep( 30 );
pool.setNagle( false );
pool.setSocketTO( 3000 );
pool.setSocketConnectTO( 0 );
pool.initialize();
}
public static Object get(String key) {
return mcc.get(key);
}
public static boolean set(String key, Object o) {
return mcc.set(key, o);
}
public static boolean add(String key, Object o) {
return mcc.add(key, o);
}
public static boolean replace(String key, Object o) {
return mcc.replace(key, o);
}
public static boolean delete(String key) {
return mcc.delete(key);
}
}
在voa英语复读网
上线前,我们对单词翻译部分进行了压力测试,在很多用第一次查询某个单词的时候,速度很慢,但系统运行一段时候后,由于常用单词都在Memcached中
进行了缓存,速度上就基本就存在问题了。
最后还有一个问题要考虑,就是在操作系统重新启动后,Memcached中缓存的数据将不再存在,为了效率考虑,你可以在应用服务器启动时,将所有的单词
对象全部读出,再添加到Memcahced中。
项目上线后性能表现还是非常不错的,你可通过www.fudu365.com查看到最终效果。
分享到:
相关推荐
**Memcached程序与PHP中的应用** Memcached是一种高性能的分布式内存对象缓存系统,用于减少数据库负载,提高...同时,配合`学习文档Url.txt`中的指南,开发者可以更深入地理解和掌握Memcached在实际项目中的应用。
【标题】:深入理解Memcached在Java项目中的应用 【描述】:本文主要探讨了Memcached作为缓存系统在Java项目中的使用,包括其在缓解数据库压力、分布式应用以及安全性方面的策略。 【标签】:memcached,java ...
- `META-INF`:这个目录通常包含应用的元数据,如MANIFEST.MF文件,但在SSM项目中可能还包含了Spring的配置文件。 7. **学习与调试**:通过阅读博客和项目代码,你可以了解SSM如何与Memcached协同工作,包括缓存的...
描述中提到的“memcached的服务端安装方法”,意味着我们需要先了解如何在服务器上安装和启动memcached服务,然后再讨论如何在SSH项目中使用它。 **memcached服务端安装** 1. **系统准备**:memcached适用于多种...
在实际的网站应用中,Memcached被广泛应用于各种高流量网站和大型互联网应用中,例如社交网络、电子商务平台等。通过将常用数据缓存到Memcached中,可以显著减少数据库查询次数,提高网站的响应速度和用户体验。 ##...
“memcached安装及java应用使用memcached”这一标题暗示了我们要讨论的是一个关于分布式内存缓存系统——memcached的安装过程以及如何在Java应用程序中使用它。Memcached是一个高性能、轻量级的分布式内存对象缓存...
总之,Memcached 项目为开发者提供了一个高效、易用的缓存解决方案,通过 Java 客户端可以轻松地在 Java 应用中集成这一功能,显著提升数据访问速度,降低数据库压力。通过理解服务端的部署和客户端的使用方法,...
4. **集成过程**:将memcached集成到ASP.NET中,通常包括安装memcached服务器(例如在本地或云环境中)、添加memcachedNET客户端库到项目中、配置连接参数(如服务器地址、端口等)以及在代码中调用API进行数据缓存...
**标题与描述解析** 标题"memcached 在ASP.NET网站下的应用实例代码(c#)"揭示了本次讨论的主题,即如何在ASP.NET环境中...开发者可以通过阅读和运行代码,理解memcached在实际项目中的运用,从而提升Web应用的性能。
Memcached是一种高性能、分布式内存对象缓存系统,用于在动态应用中减少数据库负载,提高网站性能。它简单而强大,广泛应用于许多Web应用程序中,包括C#开发的项目。这篇文章将深入探讨Memcached与C#集成的应用场景...
在实际应用中,数据库查询结果通常会被保存到memcached中,这样用户再次访问时,可以从缓存而不是数据库中获取数据,减少数据库的读取压力。这种做法极大地提升了Web应用的运行效率,尤其是在高并发访问的场景下。 ...
在本项目中,我们主要探讨的是如何将Spring Cache与memcached进行整合,以提升应用程序的性能和效率。Spring Cache是Spring框架的一部分,它提供了一种抽象的缓存管理机制,可以方便地集成到各种缓存解决方案中,如...
本文将详述如何在项目中使用Hibernate与Memcached结合实现二级缓存,并探讨Memcached的基本原理和使用方法。 首先,我们需要理解什么是Hibernate的二级缓存。在Hibernate框架中,一级缓存是每个Session级别的,它...
Memcached 是一款高性能的分布式内存缓存系统,用于在Web应用中减轻数据库负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可移植性强,广泛应用于多种编程...
在实际项目中,首先需要启动Memcached服务,然后在应用程序中配置连接信息。例如,在Web应用中,可以在用户访问页面时,先尝试从缓存中获取数据,若未命中再从数据库查询并将结果存入缓存,以提高后续请求的响应速度...
【标题】"阿里软件java版memcached安装文件和demo项目" 涉及的主要知识点是Memcached在Java环境下的...通过这些知识点的学习和实践,开发者可以更好地在Java项目中运用Memcached,提升系统的响应速度和并发处理能力。
**Spring 整合 Memcached 完整项目代码详解** 在现代Web开发中,缓存是提高应用程序性能的关键技术之一。...在"Spring整合memcached完整项目代码"中,你可以找到具体的实现细节,这将帮助你更好地理解和运用这些概念。
在J2EE应用程序中,处理用户会话是至关重要的,特别是在多服务器环境下,为了确保用户在不同服务器之间切换时能够保持其登录状态和购物车等信息。这就是session管理的用武之地。本项目通过结合使用Filter(过滤器)...
通过学习这些资源,开发者能够更好地掌握如何在实际项目中应用Memcached和Hibernate的整合,提升系统的响应速度和并发处理能力。 此外,了解如何整合Memcached和Hibernate也是提升系统架构设计能力的重要一步。在高...
【PHP与Memcached高级缓存应用】 在现代Web开发中,高效的缓存策略是提高网站性能的关键。PHP作为广泛使用的服务器端脚本语言...结合实际项目需求,灵活运用各种策略,将使你的网站在竞争激烈的互联网环境中更具优势。