今天晚上在逛一写前辈的论坛,看他写到memcached的文章,碰巧在iteye有一则关于memcached一些动态消息。网上搜了下相关资料,作为知识储备。
memcached官方网站:http://memcached.org
Memcached 是一个高性能的分布式内存
对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon
)是用C写的,但是客户端
可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly
Vorobey和Brad
Fitzpatrick。用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
如何使用memcached-Server端?
在服务端运行:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
这将会启动一个占用2G内存的进程,并打开11211端口用于接收请求。由于32位系统只能处理4G内存的寻址,所以在大于4G内存使用PAE的32位服务器上可以运行2-3个进程,并在不同端口进行监听。
如何使用memcached-Client端?
在应用端包含一个用于描述Client的Class后,就可以直接使用,非常简单。
PHP Example:
$options["servers"] = array("192.168.1.41:11211",
"192.168.1.42:11212");
$options["debug"] = false;
$memc = new MemCachedClient($options);
$myarr = array("one","two", 3);
$memc->set("key_one", $myarr);
$val = $memc->get("key_one");
print $val[0]."\n"; // prints 'one‘
print $val[1]."\n"; // prints 'two‘
print $val[2]."\n"; // prints 3
以下转载他人文章,附上该作者博客地址,做人要厚道(http://hi.baidu.com/ien_leo/blog/item/8269ce7e1dbd1fe22e73b3eb.html)
(本人很久以前的一篇原创博客,现搬家至此,欢迎大家一起来讨论讨论)
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序列化接口。
本人之前的一个项目中,当用户将鼠标停留到某个单词上时,系统要弹出该单词的解释及音标,由于项目组在开发时并没有
找到一套合适的词库,我们的解决思路是:当有用户查询时,服务器向第三方翻译网站提交单词,再从返回的结果中解析出单词解释及发音。此查询过程相当费时,
且在网络状态不好时表现不佳,但在当时这也许是最好的解决办法了。
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);
}
}
项目上线前,我们对单词翻译部分进行了压力测试,在很多用第一次查询某个单词的时候,速度很慢,但系统运行一段时候后,由于常用单词都在Memcached中
进行了缓存,速度上就基本就存在问题了。
最后还有一个问题要考虑,就是在操作系统重新启动后,Memcached中缓存的数据将不再存在,为了效率考虑,你可以在应用服务器启动时,将所有的单词
对象全部读出,再添加到Memcahced中。
|
分享到:
相关推荐
详细介绍了Memcached的使用,原理及出处
详细介绍了分布式缓存系统memcached的原理和详细使用方法。主要包括1、Memcached介绍;2、Memcached安装3、使用一些技巧等内容
Memcached 介绍 Memcached是一种集中式Cache,支持分布式横向扩展。这里需要有点说明,很多开发者觉得Memcached是一种分布式Cache,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的...
第一章:memcached 介绍....................................................................................................................1 1.1 memcached 是什么?...........................................
memcached介绍 memcached安装 memcached操作 内存存储机制 数据过期与删除机制 php操作memcached 多服务器集群算法 缓存无底洞效应 缓存雪崩 老数据被踢现象 结课作业
Memcached介绍 Memcached安装和使用 一些技巧 C++\PH一些例子
详细介绍安装Memcached及Memcached配置
先简单的介绍下什么是memcached。 Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每...
PHP内存缓存技术memcached 的安装和工作原理介绍
将这个压缩包解压,就出来一个“鹿头”的memcached.exe文件,没错!就是它了。运行它,会出现一个窗口,这个窗口一直打开着就说明memcached的服务端就一直运行着,那么它就能接收客户端的请求
memcached的介绍和使用.docx
Memcached介绍、应用场景、运行机制 Memcached安装 Memcached启动,参数 Memcached连接、监控 Memcached客户端命令 Memcached的Java客户端实例 Memcached的客户端分布式原理 Memcached的服务器端运行原理 Memcached...
MSM--Memcached_Session_Manager介绍及使用,所使用的jar包以及tomcat中的context.xml的配置
因此我们以下介绍两个不同版本 1.4.4 及 1.4.5的不同安装方法: memcached 版本安装 1、解压下载的安装包到指定目录。 2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令: c:\...
在使用 Memcached 过程中需要对 Memcached 运行状态进行监控,以便了解 Memcached 服务是否运行正常,排查 Memcached 故障等。 Prometheus 监控服务提供基于 ...本文为您介绍如何使用 Prometheus 监控服务 Memcached。
介绍Linux下memcached详细安装步骤,自己的实际安装经验。
这里将介绍Java环境下Memcached应用,Memcached主要是集群环境下的缓存解决方案,希望本文对大家有所帮助。 本文将对在Java环境下Memcached应用进行详细介绍。Memcached主要是集群环境下的缓存解决方案,可以运行在...
memcached部署,详细介绍了memcached缓存的使用,为以后的云负载均衡做一个基础。
悉心整理,亲测。请放心使用。 tomcat8+memcached共享session(套装) memcached较全面介绍.docx Nginx+Tomcat+Memcached部署.docx