Memcache--Java客户端调用示例分享
前面两篇有说道从Memcache的背景介绍到安装和使用,这篇我们就来说说如何在项目中对Memcache的客户端调用,由于我是一个java程序员,所以我在这里讲述的是java客户端的实现,但是它支持的客户端语言很多包含c/c++、php、Python、.NET等主流开发语言,我通过一段时间的学习在实际应用中发现有两种常用的版本:
java_memcached-release_2.5.1.zip客户端
memcache-client-forjava客户端
(一)java_memcached-release_2.5.1.zip客户端调用实现
首先,这个版本的实现我们可以到这里https://github.com/gwhalin/Memcached-Java-Client/downloads 下载我们所需要的客户端依赖,然后我们新建一个java项目导入这些依赖包,下面我们来实现我们的一个测试方法CacheTest.java,详细实现可以查看代码注解!
package com.cuiyongzhi.mem; import com.danga.MemCached.*; public class CacheTest { public static void main(String[] args) { /** * 初始化SockIOPool,管理memcached的连接池 * */ //服务器列表 String[] servers = { "192.168.192.128:11211" }; // Integer[] weights = {3};当存在多服务器的时候服务器之前的权重 //获取SockIOPool连接池实例对象 SockIOPool pool = SockIOPool.getInstance(); // 设置服务器信息 pool.setServers(servers); //pool.setWeights(weights); //设置权重 pool.setFailover(true); // 设置初始连接数、最小和最大连接数以及最大处理时间 pool.setInitConn(10); pool.setMinConn(5); pool.setMaxConn(250); pool.setMaintSleep(30); // 设置TCP的参数,连接超时等 pool.setNagle(false); pool.setSocketTO(3000); pool.setAliveCheck(true); // 初始化连接池 pool.initialize(); // 建立MemcachedClient实例 MemCachedClient memCachedClient = new MemCachedClient(); // 压缩设置,超过指定大小(单位为K)的数据都会被压缩 for (int i = 0; i < 100; i++) { //将对象加入到memcached缓存 boolean success = memCachedClient.set("" + i, "Hello!"); // 从memcached缓存中按key值取对象 String result = (String) memCachedClient.get("" + i); System.out.println(String.format("set( %d ): %s", i, success)); System.out.println(String.format("get( %d ): %s", i, result)); } } }
这里运行成功的前提是你需要开启一个Memcache的守护进程并且端口号和ip需要是你自己的,运行成功我们可以通过Telnet方式进入查看,如下:
(二)memcache-client-forjava客户端实现
这个是阿里的大神开发的一套用于memcached框架,项目地址 https://code.google.com/p/memcache-client-forjava/ ,下载对应的jar文件 alisoft-xplatform-asf-cache-2.5.1.jar,这个jar文件依赖于一些开源的库文件(参考大神写的 Memcached_Client_HandBook.docx ,里面详细列举了需要的依赖包):
commons-logging-1.0.4.jar or high version log4j-1.2.12.jar or high version codehaus/woodstox/wstx-asl-3.2.1.jar or high version codehaus/staxapi/stax-api-1.0.1.jar or high version 2.5.2版本以后还需要caucho/hessian/hessian-3.2.0.jar or high version
导入到相应的依赖之后我们就可以开始我们的客户端调用了,首先我们建立我们的配置文件memcached.xml,存放到src下,配置如下:
<?xml version="1.0" encoding="UTF-8"?> <memcached> <!-- name 属性是程序中使用Cache的唯一标识;socketpool 属性将会关联到后面的socketpool配置; --> <client name="mclient_0" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool_0"> <!-- 可选,用来处理出错情况 --> <!-- <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler </errorHandler> --> </client> <!-- name 属性和client 配置中的socketpool 属性相关联。 maintSleep属性是后台线程管理SocketIO池的检查间隔时间,如果设置为0,则表明不需要后台线程维护SocketIO线程池,默认需要管理。 socketTO 属性是Socket操作超时配置,单位ms。 aliveCheck 属性表示在使用Socket以前是否先检查Socket状态。 --> <socketpool name="pool_0" maintSleep="5000" socketTO="3000" failover="true" aliveCheck="true" initConn="5" minConn="5" maxConn="250" nagle="false"> <!-- 设置memcache服务端实例地址.多个地址用","隔开 --> <servers>192.168.192.128:11211</servers> <!-- 可选配置。表明了上面设置的服务器实例的Load权重. 例如 <weights>3,7</weights> 表示30% load 在 10.2.224.36:33001, 70% load 在 10.2.224.46:33001 <weights>3,7</weights> --> </socketpool> </memcached>
每个配置参数的设置和详解可以参照代码注解,下面我们来写我们的测试代码,如下:
package com.cuiyongzhi.mem; import com.alisoft.xplatform.asf.cache.ICacheManager; import com.alisoft.xplatform.asf.cache.IMemcachedCache; import com.alisoft.xplatform.asf.cache.memcached.CacheUtil; import com.alisoft.xplatform.asf.cache.memcached.MemcachedCacheManager; public class CacheTestTwo { public static void main(String[] args) { ICacheManager<IMemcachedCache> manager; manager = CacheUtil.getCacheManager(IMemcachedCache.class, MemcachedCacheManager.class.getName()); // 获取src文件路径 // ClassLoader cl = Thread.currentThread().getContextClassLoader(); // System.out.println(cl.getResource("memcached.xml")); manager.setConfigFile("memcached.xml"); manager.start(); try { IMemcachedCache cache = manager.getCache("mclient_0"); cache.put("key", "value"); System.out.println(cache.get("key")); } finally { manager.stop(); } } }
运行结果可以采用cmd可以获取key的值,如下:
所有的java-Memcache的客户端两种调用方式的代码实现就基本完成了,这里需要的所有依赖可以到这里下载 http://download.csdn.net/detail/u010488222/9464168 ,最后项目结构如下图:
感谢你的翻阅,如有疑问和需要可以留言讨论!