设为首页 收藏本站
查看: 1282|回复: 0

[经验分享] memcache-client-forjava的使用

[复制链接]

尚未签到

发表于 2017-4-15 10:25:18 | 显示全部楼层 |阅读模式
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-365027-1-1.html 上篇帖子: memcache 的总体轮廓一览 下篇帖子: windows 版本的memcache
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表