- 浏览: 721750 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (113)
- 移动支付 (1)
- 系统安全 (1)
- JAVA-Team研发环境 (2)
- 配置管理 (3)
- 开发 (3)
- 页面脚本开发 (5)
- 系统脚本开发 (1)
- 数据库 (6)
- 分布式 (8)
- JAVA基础及算法 (7)
- 开发集成及部署 (4)
- activeMQ (0)
- Thrift (1)
- memcached (11)
- linux (16)
- LVS (4)
- 日志 (4)
- hadoop (7)
- tcpdump (1)
- wireshark (1)
- test (0)
- Android BaseActivity (0)
- 云存储 (1)
- HTTP (3)
- S3 (1)
- xml (2)
- 序列化 (1)
- 部署 (0)
- 系统架构 (9)
- 存储 (0)
- 设计模式 (1)
- Spring (2)
- J2EE (4)
- maven (3)
- MYSQL (2)
- LDAP (2)
- JQuery (1)
- easyui (1)
- web前端 (1)
- tomcat (1)
- nosql (2)
- 开发技巧 (1)
- JPA (1)
- hibernate (1)
- Quartz (1)
最新评论
-
xinglianxlxl:
对我有用,非常感谢
xstream初步使用 -
liangbo11:
eclipse都无法启动
JDK扩展DCEVM让WEB程序完全不重启调试 -
Love_wh1314:
果然是这个问题。。。维护别人的代码,开始还以为自己改错了,结 ...
JQuery 实践问题 - toLowerCase 错误 -
tonyyan:
谢谢分享!
MAVEN Scope使用 -
908311595:
多谢楼主分享
xstream初步使用
介绍
Memcached java client是官方推荐的最早的memcached java客户端。最新版本:java_memcached-release_2.6.1。
官方下载地址:https://github.com/gwhalin/Memcached-Java-Client
采用阻塞式SOCKET通讯,据说目前版本进行了很多优化,性能有所提高(只看过1.5的源代码,还没来及看最新的)
提供key方式的连接池,默认连接池key为default。(老版本了)。2.6.1版本支持apache-commoms-pool作为连接池。
支持权重配置。
后期的版本提增加了cas支持和getMutl功能
官方示例代码
import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; import com.schooner.MemCached.MemcachedItem; public class MemcachedForJavaExample { // create a static client as most installs only need // a single instance protected static MemCachedClient mcc = new MemCachedClient(); // set up connection pool once at class load static { // server list and weights String[] servers = { "localhost:11211", "localhost:11212", "localhost:11213" }; Integer[] weights = { 3, 3, 2 }; // grab an instance of our connection pool SockIOPool pool = SockIOPool.getInstance(); // set the servers and the weights pool.setServers(servers); pool.setWeights(weights); pool.setHashingAlg(SockIOPool.CONSISTENT_HASH); // set some basic pool settings // 5 initial, 5 min, and 250 max conns // and set the max idle time for a conn // to 6 hours pool.setInitConn(5); pool.setMinConn(5); pool.setMaxConn(250); pool.setMaxIdle(1000 * 60 * 60 * 6); // set the sleep for the maint thread // it will wake up every x seconds and // maintain the pool size pool.setMaintSleep(30); // set some TCP settings // disable nagle // set the read timeout to 3 secs // and don't set a connect timeout pool.setNagle(false); pool.setSocketTO(3000); pool.setSocketConnectTO(0); // initialize the connection pool pool.initialize(); } public static void main(String[] args) { System.out.println("SET: " + mcc.set("key1", "value1")); System.out.println("SET: " + mcc.set("key2", "value2")); System.out.println("SET: " + mcc.set("key3", "value3")); System.out.println("GET: " + mcc.get("key1")); MemcachedItem item = mcc.gets("key1"); System.out.println("GETS: value=" + item.getValue() + ",CasUnique:"+item.getCasUnique()); System.out.println("SET: " + mcc.set("key1", "value1_1")); System.out.println("CAS: " + mcc.cas("key1", "value1_2", item.getCasUnique())); //必须FALSE System.out.println("getMulti:" + mcc.getMulti(new String[]{"key1","key2","key3"})); } }
我的代码
这个标题不好取,因为是我自己的想法,还需要大家多提意见,一起讨论。想叫“建议代码”或者“推荐代码”,觉得不合适,还是先叫“我的代码”吧,呵呵。
我的思路
1. 在原始客户端上层,根据业务需求封装MemcachedService(或叫MemcachedClient),负责缓存功能的包装。如:你的业务只需要add,set,get,gets,cas,delete业务,那就只封装这几个功能。这样做的好处是,屏蔽了各种客户端的API差异,让你的业务系统与客户端实现解耦合,如果你以后需要换客户端实现,对你的业务系统不会照成影响。
2. 一般不要直接采用new的方式在你的代码中显示使用memcached客户端实现,应该采用单例的方式使用memcached客户端实现,或者使用Spring的singleton方式配置。Memcached客户端实现是线程安全的。
3. memcached客户端一般都需要大量的配置,考虑扩展和配置修改,应该把参数设置设计为可配置的,可以写到propertis配置文件中或是使用Spring进行配置。
我的实现
业务层封装接口
/** * Memcached 常用功能接口定义,用于业务层直接使用,屏蔽各种客户端实现的API差异,实现解耦客户端与业务系统的目的 * 无过期时间和flags支持,无append,prepend,replace,incr,decr等操作 * * @author zhangpu * */ public interface MemcachedClientService { String get(String key); CacheItem gets(String key); boolean add(String key, String value); boolean set(String key, String value); boolean cas(String key, String value, long unique); boolean delete(String key) boolean flushAll(); }
public class CacheItem { private String key; private String value; private long unique; public CacheItem() { super(); } public CacheItem(String key, String value, long unique) { super(); this.key = key; this.value = value; this.unique = unique; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public long getUnique() { return unique; } public void setUnique(long unique) { this.unique = unique; } }
客户端缓存服务实现
/** * Memcached for java客户端缓存服务实现 * @author zhangpu * */ public class MemcachedClientJava implements MemcachedClientService { MemCachedClient mmc = MemcachedClientFactory.getInstance(); public boolean add(String key, String value) { return mmc.add(key, value); } public boolean cas(String key, String value, long unique) { return mmc.cas(key, value, unique); } public String get(String key) { return (String) mmc.get(key); } public CacheItem gets(String key) { MemcachedItem item = mmc.gets(key); return new CacheItem(key, (String) item.getValue(), item.getCasUnique()); } public boolean set(String key, String value) { return mmc.set(key, value); } public boolean delete(String key) { return mmc.delete(key); } public boolean flushAll() { return mmc.flushAll(); } }
获取客户端实例
/** * MemcachedClient 单例(JDK1.5以上) * @author zhangpu * */ public class MemcachedClientFactory extends ConfigurableConstants{ private static volatile MemCachedClient mmc; static { init("memcached-client.properties"); //{ "localhost:11211", "localhost:11212", "localhost:11213" }; String[] servers = getProperty("memcached-servers","").split(","); Integer[] weights = null; String weightsCfg = getProperty("memcached-weights",""); if(weightsCfg != null){ String[] wcfg = weightsCfg.split(","); weights = new Integer[wcfg.length]; for (int i = 0; i < weights.length; i++) { weights[i] = Integer.valueOf(wcfg[i]); } }else{ weights = new Integer[servers.length]; for (int i = 0; i < weights.length; i++) { weights[i] = 1; } } SockIOPool pool = SockIOPool.getInstance(); pool.setServers(servers); pool.setWeights(weights); pool.setHashingAlg(SockIOPool.CONSISTENT_HASH); pool.setInitConn(getProperty("memcached-initConn",5)); pool.setMinConn(getProperty("memcached-minConn",5)); pool.setMaxConn(getProperty("memcached-maxConn",250)); pool.setMaxIdle(1000 * 60 * 60 * 6); pool.setMaintSleep(30); pool.setNagle(false); pool.setSocketTO(3000); pool.setSocketConnectTO(0); pool.initialize(); } private MemcachedClientFactory() { } public static MemCachedClient getInstance() { if (mmc == null) { synchronized (MemCachedClient.class) { if (mmc == null) { mmc = new MemCachedClient(); } } } return mmc; } }
参数配置
/** * 通过 properties 文件配置设置常量基类 负责加载和读取 properties 属性文件并提供访问的静态工具方法 * * @author zhangpu * */ public class ConfigurableConstants { protected static Log logger = LogFactory.getLog(ConfigurableConstants.class); protected static Properties p = new Properties(); protected static void init(String propertyFileName) { InputStream in = null; try { in = ConfigurableConstants.class.getClassLoader().getResourceAsStream(propertyFileName); if (in != null) p.load(in); } catch (IOException e) { logger.error("load " + propertyFileName + " into Constants error!"); } finally { if (in != null) { try { in.close(); } catch (IOException e) { logger.error("close " + propertyFileName + " error!"); } } } } protected static String getProperty(String key, String defaultValue) { return p.getProperty(key, defaultValue); } protected static int getProperty(String key, int defaultValue) { try { return Integer.parseInt(getProperty(key, "")); } catch (Exception e) { return defaultValue; } } }
配置文件
memcached-client.properties
memcached-client.properties memcached-servers=localhost:11211,localhost:11212,localhost:11213 memcached-weights=3,3,2 memcached-initConn=5 memcached-minConn=5 memcached-maxConn=250
后续提供性能测试,spring整合,版本差异测试,及其它客户端对比。
- memcached.rar (9.1 KB)
- 下载次数: 207
评论
发表评论
-
Memcached学习笔记
2011-07-10 02:04 2745公司很多项目都会使用缓存,而且都是在分布式环境中使用,比较全面 ... -
Memcached学习笔记 — 第六部分-Memcached缓存模型
2011-07-10 01:51 2083缓存机制: Slab Allocation ... -
Memcached学习笔记 — 第五部分-Memcached分布式实现
2011-07-10 01:43 8536memcached 虽然称为 “ 分布式 ” ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(5)-主要API解析
2011-07-10 01:38 4536找了很久都找不到官 ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(4)-版本差异
2011-07-09 22:38 4974Memcached Java Client 版本差异 ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(3)-Spring整合
2011-07-09 22:22 5014Memcached Java Client Spring ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(2)-性能测试
2011-07-09 22:03 2905Memcached JJAVA Client 性能测试 ... -
Memcached学习笔记 — 第三部分:Memcached协议详解
2011-07-09 02:46 14864Memcached 支持两种主要的协 ... -
Memcached学习笔记 — 第二部分:Memcached服务器安装
2011-07-09 02:17 7052Windows版本安装 windows 上安装 ... -
Memcached学习笔记 — 第一部分:Memcached基础
2011-07-09 02:07 2909本文是基于网上资料和自己的理解整理的学习笔记, ...
相关推荐
java-memcached-2.6.6.jar
memcache客户端jar包: 1,java_memcached-release_2.6.6.jar 2,commons-pool-1.5.6.jar 3,slf4j-api-1.6.1.jar 4,slf4j-simple-1.6.1.jar
这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,
Memcached的java客户端已经存在三种了: 1.官方提供的基于传统阻塞io由Greg Whalin维护的客户端。 较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。 2.spymemcached,支持异步,单线程的memcached客户端...
Memcached Cache现在已经被大家广泛使用,但是千万不要认为对Cache的操作是低损耗的,要知道这类集中式Cache对Socket连接数(会牵涉到linux操作系统文件句柄可用数),带宽,网络IO都是有要求的,有要求就意味着会有...
Memcached学习笔记2.docMemcached学习笔记2.doc
NULL 博文链接:https://da-zhuang.iteye.com/blog/2234078
Jellycan Code | memcached Home The Good Egg SimpleIni SimpleOpt MemCacheClient Moji memcached show_menu2 menusys StringWrapper ML Fancy Excerpt LangSelect Visual Studio CommentsThis page contains a ...
java_memcached-release_2.6.3.rar 客户端所有包,用于java客户端开发。
用于hibernate集成memcached作为二级缓存所需要的包,1.2.2版本
Memcache java jar 包 java_memcached-release_2.5.1.jar
服务端 memcached的windows版本直接解压缩到文件夹 c:>memcached.exe -d install c:>memcached.exe -l 127.0.0.1 -m 32 -d start 通过两个命令启动服务器 ...java 版本的memcached客户端 下载jar包自己参照API实现
本资源含有基于java的memcached 的数据缓存开发所需的 memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip 快来一起学习吧
Cache :: Memcached :: AnyEvent-AnyEvent兼容的Memcached客户端 概要 use Cache::Memcached::AnyEvent; my $memd = Cache::Memcached::AnyEvent->new({ servers => [ '127.0.0.1:11211' ], compress_threshold =...
Memcached-Java-Client-3.0.2.jar
memcachedclient-2.0.1.jar 之前在网上搜了很久没搜到,所以找到了跟大家分享
redis安装:.msi文件打开直接安装即可,注意选择添加patt选项 memcached: memcached-win64-1.4.4-14 + PHP7-memcache-dll-master(7.1~7.3) + memcached.dll ... memcached.exe -d install(开启关闭服务:start/stop)
memcached的基本设置: -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d ...
memcached-java-operator memcached-java-operator