订阅博客
收藏博客
微博分享
QQ空间分享

Memcache--Java客户端调用示例分享

频道:技术分享 标签:菜鸟程序员缓存相关学习 时间:2016年03月17日 浏览:1529次 评论:0条

前面两篇有说道从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方式进入查看,如下:

1.png

(二)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的值,如下:

2.png

所有的java-Memcache的客户端两种调用方式的代码实现就基本完成了,这里需要的所有依赖可以到这里下载 http://download.csdn.net/detail/u010488222/9464168 ,最后项目结构如下图:

3.png

感谢你的翻阅,如有疑问和需要可以留言讨论!


◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信