1、安装
Linux环境下安装
1--安装libevent
#tar zvxf libevent-2.0.13-stable.tar.gz
#cd libevent-2.0.13-stable
#./configure --prefix=/usr
#make
#make install
--检查是否成功
# ls -al /usr/lib | grep libevent
2--安装memcached
#tar zxvf memcached-1.4.0.tar.gz
#cd memcached-1.4.0
# ./configure --with-libevent=/usr
# make
# make install
--检查是否成功
root@yang-desktop:~$ ls -la /usr/local/bin/*mem*
-rwxr-xr-x 1 root root 257899 2011-09-18 18:10/usr/local/bin/memcached
3--启动memcached
/usr/local/bin/memcached -d -m 100 -u root -l 127.0.0.1-p 11211 -c 256
【说明】
-d:启动一个守护进程,
-m:分配给Memcache使用的内存数量,单位是MB,默认是64MB,
-u:运行Memcache的用户
-l:监听的服务器IP地址,127.0.0.1 为ip地址,多个间隔用逗号
-p:设置Memcache监听的端口,默认是11211注:-p(p为小写)
-c:设置最大并发连接数,默认是1024
-h 显示帮助
4--关闭memcached
killall memcached
windows环境下安装
1 下载memcached-1.2.6-win32-bin.zip,地址为:
http://code.jellycan.com/memcached/
2 cmd命令运行memcached.exe -d install
3 cmd命令net start "memcached Server",打开任务管理器,可以看见memcached.exe的进程.
4 F:/php/mem/memcached.exe -d start
指定内存划分-m 200 ,IP监听 -l 192.168.1.*,端口号-p 11211等
5 验证安装成功:进入telnet localhost 11211
6 进入. 输入version查看版本,输入stats查看状态
2、示例代码
使用Memcache客户端需要依赖的第三方类库:
commons-logging-1.0.4.jar or highversion
log4j-1.2.12.jar or high version
codehaus/woodstox/wstx-asl-3.2.1.jaror high version
codehaus/staxapi/stax-api-1.0.1.jaror high version
基础配置文件:
<?xml version="1.0"encoding="UTF-8"?>
<memcached>
<client name="mclient1"compressEnable="true" defaultEncoding="UTF-8"socketpool="pool0"> <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
</client>
<socketpool name="pool0"failover="true" initConn="5" minConn="5"maxConn="250" maintSleep="0"
nagle="false"socketTO="3000" aliveCheck="true">
<servers>127.0.0.1:11211</servers>
</socketpool>
<cluster name="cluster1">
<memCachedClients>mclient1</memCachedClients>
</cluster>
</memcached>
1. 创建memcached的标签。
2. 创建 client的标签。
注意:
name 属性是程序中使用Cache的唯一标识。
socketpool 属性将会关联到后面的socketpool配置。
errorHandler 可选,用来处理出错情况。注意在Tag中不要使用空格或者Tab键。
3. 创建socketpool的标签。
注意:
name 属性和client 配置中的socketpool 属性相关联。
maintSleep属性是后台线程管理SocketIO池的检查间隔时间,如果设置为0,则表明不需要后台线程维护SocketIO线程池,默认需要管理。
socketTO 属性是Socket操作超时配置,单位ms。
aliveCheck 属性表示在使用Socket以前是否先检查Socket状态。
4. 创建 servers 标签作为socketPool的子标签.设置memcache服务端实例地址,支持多个地址设置,例如“127.0.0.1” 或 “127.0.0.1:11211, 127.0.0.1:11212”.
5. 创建 weights 标签作为socketPool的子标签(可选),它表明了上面设置的服务器实例的Load权重. 例如<weights>3,7</weights> 表示30% load 在127.0.0.1:11211, 70% load 在127.0.0.1:11212
客户端
简单使用:
public void test()
{
ICacheManager<IMemcachedCache>manager;
manager =CacheUtil.getCacheManager(IMemcachedCache.class,
MemcachedCacheManager.class.getName());
manager.setConfigFile("memcached1.xml");//可以指定配置文件名
manager.start();
try
{
IMemcachedCache cache = manager.getCache("mclient");
cache.put("key","value");
org.junit.Assert.assertEquals(cache.get("key"),"value");
}
Finally{ manager.stop();}
}
注意:
Cache Manger 不要创建多个,一个实例就可以满足应用的需求,它会负责创建和初始化所有配置在Classpath下配置文件中的客户端, Cache Manager 也可以由开发者自己实现,只需要在你的jar中META-INF/services 目录里建立文件名为“com.alisoft.xplatform.asf.cache.ICacheManager”的文件,然后将将实现类全路径写在这个文件中即可,框架将会自动载入。
Cache Manger start 表示初始化所有的配置过的客户端,stop 表示释放Cache Pool中客户端的资源。
结合本地Cache使用 Memcache:
publicvoid test()
{
ICacheManager<IMemcachedCache> manager;
manager =CacheUtil.getCacheManager(IMemcachedCache.class,
MemcachedCacheManager.class.getName());
manager.start();
try
{
IMemcachedCache cache =manager.getCache("mclient");
cache.put("key", "value");
org.junit.Assert.assertEquals(cache.get("key",5),"value");
}
Finally{ manager.stop();}
}
使用本地Cache结合Memcache,可以极大提高程序的执行效率,因为Memcache还是会在网络交互中损耗,因此将数据根据敏感程度在本地也作有效时间缓存可以提高效率。 Cache.get(“key”,5)表示首先从本地缓存获取”key”的值,如果存在立即返回,如果不存在,则查询Memcache,当Memcache获取到此数据,则将该数据缓存在本地缓存,并且设置有效期为5秒钟后失效。