`
stephen830
  • 浏览: 3011547 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

memcache-client-forjava的使用

 
阅读更多

 

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 ,里面详细列举了需要的依赖包)

 

Cache Client第三方依赖

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

 

 

Cache Client单客户端配置

 

 memcached.xml,存放目录 /src目录下

 

<?xml version="1.0" encoding="UTF-8"?>
<memcached>
    		<client name="mclient0" 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="5000"
        			nagle="false" socketTO="3000" aliveCheck="true">
        		<servers>10.2.224.36:33001,10.2.224.46:33001</servers>
			<weights>3,7</weights>
   		 </socketpool> 
</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服务端实例地址,支持多个地址设置,例如“10.2.224.36:33001” 或 “10.2.224.36:33001, 10.2.224.46:33002”.

5.创建 weights 标签作为socketPool的子标签(可选),它表明了上面设置的服务器实例的Load权重. 例如 <weights>3,7</weights> 表示30% load 在 10.2.224.36:33001, 70% load 在 10.2.224.46:33001

 

好了,基础的配置就如上。

 

 或者,也可以配置多个client,如下

 

<?xml version="1.0" encoding="UTF-8"?>
<memcached>
    <client name="mclient0" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool0">
    	<errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>    		
    </client>
    <client name="mclient1" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool1">
    	<errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>    		
    </client>
    <client name="mclient2" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool2">
    	<errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>    		
    </client>
	<socketpool name="pool0" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="5000" nagle="false" socketTO="3000" aliveCheck="true">
      	<servers>127.0.0.1:11211</servers>
		<weights>1</weights>
 	</socketpool> 
 	<socketpool name="pool1" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="5000" nagle="false" socketTO="3000" aliveCheck="true">
      	<servers>127.0.0.1:11311</servers>
		<weights>1</weights>
 	</socketpool>
 	<socketpool name="pool2" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="5000" nagle="false" socketTO="3000" aliveCheck="true">
      	<servers>127.0.0.1:11411</servers>
		<weights>1</weights>
 	</socketpool>
</memcached>

 

 

使用前,必须按照配置文件来启动memcached!例如:

./memcached -d -m 128 -l 127.0.0.1 -p 11211 

./memcached -d -m 128 -l 127.0.0.1 -p 11411 -u root

。。。

 

 

 在web项目启动中首先初始化memcache;准备一个Java文件,例如

Memcache.java,在启动类中调用Memcache.init()方法,对memcache进行初始化。

 

 

package demo;


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 Memcache {
	
	public static ICacheManager<IMemcachedCache> manager;
	
	//初始化方法
	public static void init(){
		System.out.println("Memcache.int() start");
		try{
			manager = CacheUtil.getCacheManager(IMemcachedCache.class,MemcachedCacheManager.class.getName());
			manager.setConfigFile("memcached.xml");
			manager.setResponseStatInterval(5*1000);
			manager.start();
		}catch(Exception e){
			e.printStackTrace();
		}
		System.out.println("Memcache.int() end");
	}
	
	//get cache
	public static IMemcachedCache cache(){
		return manager.getCache("mclient0");
	}
	
	
	public static void main(String[] argc) {
		init();
		System.out.println("add key:key001=value001");
		Memcache.cache().put("key001", "value001");
	}
}
 

 默认配置文件名为memcached.xml 如果你的文件名和这个相同,那么 manager.setConfigFile(null)这样写就可以了,不用写上xml文件名。

 

该默认文件名是在 com.alisoft.xplatform.asf.cache.memcached.MemcachedCacheManager类中定义的:

privatestaticfinal String MEMCACHED_CONFIG_FILE ="memcached.xml";

 

当memcache初始化后,就可以开始使用了,如下的简单例子:

 

/**
	 * 获取全部已发布的链接.
	 * @param db
	 * @return
	 * @throws Exception
	 */
	public static List<Link> listAllPublish(DbFactory db) throws Exception{
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT * FROM t_link where li_state=");
        sql.append(Constant.LINK_STATE_PUBLISH);
        sql.append(" order by li_order_no");
        
        String key = StringTool.md5(sql.toString());
        if(Memcache.cache().containsKey(key)){
        	System.out.println("read from Memcache");
        	return (List<Link>)(Memcache.cache().get(key));
        }else{
        	System.out.println("read from DB");
        	List<Link> records = db.clear().setClazz(Link.class).setSql(sql.toString()).queryList();
            Memcache.cache().put(key,records);
            return records;
        }
	}

 

一般可以用数据库查询的sql语句的md5编码数值作为 memcache的key。

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 yzr007 2015-09-15  
请问一下,你这个方式在真正的项目开发中应用过嚒,最近用这个方式开发,遇到了点问题,只要用这个方式启动memcache的链接池,就会造成在程序停止不下来的情景

相关推荐

    memcached client for java

    谷歌对于memcached提供给Java的客户端有spymemcached、xmemcached、memcache-client-forjava等多种形式,但memcache-client-forjava是使用最多、最稳定的。里边的文件和文档(有中文文档)都是从官网下载的,里边的...

    memcached java client

    本篇文章将详细介绍两个常用的Java Memcached客户端:xmemcached和memcache-client-forjava。 **1. xmemcached** xmemcached是由Ketoo开发的一个高性能、高可用性的Java Memcached客户端。它提供了丰富的API,支持...

    java_memcached-release_2.5.1

    这次主要的优化工作还是在三个方面:应用服务器(Apache,JBoss)配置,业务流程,Cache Client包(http://code.google.com/p/memcache-client-forjava/ )。这里把过去和这次优化对于Cache的使用作一个经验分享,...

    memcached for java client 例子

    2. **Java客户端库**:为了在Java应用中使用memcached,我们需要一个客户端库,如spymemcached、xmemcached或者memcached-java-client等。这些库提供了与memcached服务器通信的接口和方法。 3. **安装与配置**:在...

    Memcache原理及实现

    - 客户端库:对于Java开发,常用的客户端库是memcached client for java(也称为spymemcached),它提供方便的API接口,便于Java应用程序与Memcache服务器进行通信。 - 其他依赖:在Windows环境下,可以下载预编译...

    java遍历Memcache详细代码

    为了更深入了解Memcache的使用,可以参考`Memcached-Java-Client`压缩包中的文档和示例代码,它应该包含更多关于如何设置、存储和检索数据以及处理异常的信息。同时,学习如何优化Memcache配置和使用最佳实践,如...

    memcached 完整的项目,服务端(win) 客户端 包括jar包

    `memcache.zip` 中包含的是 `memcached-java-client-2.6.3.jar`,这是一个支持 Java 平台的 Memcached 客户端库。使用步骤如下: 1. 将 `memcached-java-client-2.6.3.jar` 添加到项目的类路径中。 2. 引入必要的库...

    Java memcache缓存实现for Windows.docx

    在Windows环境下,我们可以使用Java客户端来与Memcached服务进行交互。本文将详细介绍如何在Java中实现Memcached缓存,并探讨相关API的使用。 1. **Memcached Java Client API** - `SockIOPool`: 这个类负责管理...

    Java memcache缓存实现for Windows.pdf

    Memcached与多种编程语言兼容,包括Java,这使得在Java应用程序中使用Memcache成为可能。对于Java开发人员来说,主要的客户端API是SockIOPool和MemCachedClient。其中,SockIOPool是连接池管理器,负责与服务器之间...

    tomcat6 memcache session manager session共享 jar包下载

    5. `slf4j-api.jar` 和 `slf4j-log4j12.jar`: SLF4J(Simple Logging Facade for Java)是日志记录的抽象层,`slf4j-log4j12.jar`则是SLF4J的具体实现,用于提供日志输出。 要使用这些jar文件,你需要按照描述中的...

    memcache 安装和使用

    以 Java 为例,我们可以使用 `spymemcached` 库。 - 添加 `spymemcached` 依赖到项目中(如 Maven 项目): ```xml &lt;groupId&gt;net.spy&lt;/groupId&gt; &lt;artifactId&gt;spymemcached &lt;version&gt;2.12.3 ``` - 示例代码(`...

    memcached for java

    由memcached开发人员维护的一个 java客户端,效率比较高,比较稳定

    memcached linux安装说明+ java客户端调用例子

    - `slf4j-api-1.6.1.jar` 和 `slf4j-simple-1.6.1.jar`: Simple Logging Facade for Java (SLF4J),一个日志抽象层,方便更换不同的日志实现。 以下是使用spymemcached进行Java客户端调用的基本步骤: 1. **导入...

    普通java工程测试java使用memcached连接服务端

    首先,为了在Java工程中使用Memcached,我们需要引入一个Java客户端库。常见的有spymemcached和xmemcached,这里以spymemcached为例。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;...

    blog.chukai.pro:blog.chukai.pro的来源

    停止更新 由于认知升级,此博客不再更新,重定向为作品集: 关于 这是我的博客: 整站源码。...axios:Promise based HTTP client for the browser and node.js. lscache:A localStorage-based memcache-i

    php帮助文档,php。chm,php必备的中文手册

    Ming functions for Flash LXXIX. Miscellaneous Functions LXXX. mnoGoSearch Functions LXXXI. Microsoft SQL Server Functions LXXXII. Microsoft SQL Server and Sybase Functions (PDO_DBLIB) LXXXIII. Mohawk...

    php手册.chm,php手册

    CURL, Client URL Library Functions XIX. Cybercash Payment Functions XX. Cyrus IMAP administration Functions XXI. Database (dbm-style) Abstraction Layer Functions XXII. Date/Time 日期/时间函数 XXIII....

    异步并行加载工具Asyncload.zip

    I/O目前一般的I/O的访问速度: L1 &gt; L2 &gt; memory -&gt; disk or network常见的IO:nas上文件 (共享文件存储)output/xxx (磁盘文件)memcache client / cat client (cache服务)database (oracle , mysql) (数据库)dubbo ...

    获取xml叶子节点

    在Java中,我们可以使用DOM(Document Object Model)或SAX(Simple API for XML)等解析器来处理XML。DOM将整个XML文档加载到内存中形成一棵树形结构,方便我们遍历;而SAX则采用事件驱动的方式,按需读取XML内容,...

    PHP手册(带评论版-2008-03-14).part2.rar

    CURL, Client URL Library Functions XIX. Cybercash Payment Functions XX. Cyrus IMAP administration Functions XXI. Database (dbm-style) Abstraction Layer Functions XXII. Date/Time 日期/时间函数 XXIII....

Global site tag (gtag.js) - Google Analytics