java memcachedclient_memcached client — memcached client for java使用 | 学步园
memcached client for java是另一个memcached的java客户端
代码:
(1)MemcachedServer -- memcached的服务器
public class MemcachedServer {
private String address;
private int port;
private int weight;
public MemcachedServer(String address, int port, int weight) {
this.address = address;
this.port = port;
this.weight = weight;
}
public String getAddress() {
return address;
}
public int getPort() {
return port;
}
public int getWeight() {
return weight;
}
public String toString() {
return address + ":" + port + "," + weight;
}
}
(2)MemcachedException
@SuppressWarnings("serial")
public class MemcachedException extends Exception {
public MemcachedException() {
super();
}
public MemcachedException(Throwable t) {
super(t);
}
public MemcachedException(String error) {
super(error);
}
public MemcachedException(String error, Throwable t) {
super(error, t);
}
}
(3)PoolDefaultProperties -- memcached池初始化参数
import java.util.Properties;
public class PoolDefaultProperties extends Properties {
private static final long serialVersionUID = -7630655479181446040L;
public PoolDefaultProperties() {
super();
initDefault();
}
private void initDefault() {
initConn();
initMainSleep();
initTCP();
initFailover();
initAliveCheck();
}
protected void initConn() {
setProperty("initConn", "10");
setProperty("minConn", "10");
setProperty("maxConn", "20");
setProperty("maxIdle", String.valueOf(1000 * 60 * 30));
}
protected void initMainSleep() {
setProperty("maintSleep", String.valueOf(1000 * 5));
}
protected void initTCP() {
setProperty("nagle", "false");
setProperty("socketTO", String.valueOf(1000 * 3));
setProperty("socketConnectTO", String.valueOf(1000 * 3));
}
protected void initFailover() {
setProperty("failover", "true");
setProperty("failback", "true");
}
protected void initAliveCheck() {
setProperty("aliveCheck", "true");
}
}
(4)MemcachedPool -- memcached池
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.danga.MemCached.SockIOPool;
public class MemcachedPool {
private static final Log logger = LogFactory.getLog(MemcachedPool.class);
private static Properties POOL_DEFAULT_VALUE = new PoolDefaultProperties();
private static MemcachedPool pool = new MemcachedPool();
private MemcachedPool() {}
public static MemcachedPool getInstance() {
return pool;
}
public void initPool(List servers) throws MemcachedException {
initPool(servers, POOL_DEFAULT_VALUE);
}
public void initPool(List servers, Properties props) throws MemcachedException {
SockIOPool sockIOPool = SockIOPool.getInstance();
//server & weight
sockIOPool.setServers(getServer(servers));
sockIOPool.setWeights(getWeight(servers));
//bean props
Set keys = props.keySet();
Iterator keyIter = keys.iterator();
while (keyIter.hasNext()) {
String key = (String)keyIter.next();
String value = props.getProperty(key);
if (value == null) {
value = POOL_DEFAULT_VALUE.getProperty(key);
}
try {
Class type = PropertyUtils.getPropertyType(sockIOPool, key);
logger.debug("Type=" + type + ";Key=" + key + ";Value=" + value);
Object val = ConvertUtils.convert(value, type);
PropertyUtils.setSimpleProperty(sockIOPool, key, val);
} catch (IllegalAccessException e) {
throw new MemcachedException("Init Pool Fail", e);
} catch (InvocationTargetException e) {
throw new MemcachedException("Init Pool Fail", e);
} catch (NoSuchMethodException e) {
throw new MemcachedException("Init Pool Fail", e);
}
}
sockIOPool.initialize();
}
private Integer[] getWeight(List weigths) {
Integer[] w = new Integer[weigths.size()];
for (int i = 0; i < weigths.size(); i++) {
w[i] = weigths.get(i).getWeight();
}
return w;
}
private String[] getServer(List servers) {
String[] s = new String[servers.size()];
for (int i = 0; i < servers.size(); i++) {
MemcachedServer server = servers.get(i);
s[i] = server.getAddress() + ":" + server.getPort();
}
return s;
}
}
(5)MemcachedCli -- memcached操作客户端(只有set,get方法)
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.danga.MemCached.MemCachedClient;
public class MemcachedCli {
private static MemcachedCli unique = new MemcachedCli();
private MemcachedCli() {
init();
}
public static MemcachedCli getInstance() {
return unique;
}
private MemCachedClient client = new MemCachedClient();
private void init() {
client.setPrimitiveAsString(true);
client.setCompressEnable(true);
client.setCompressThreshold(4 * 1024);
}
public boolean set(String key, Object value) {
return client.set(key, value);
}
public boolean set(String key, Object value, Date expired) {
return client.set(key, value, expired);
}
public Object get(String key) {
return client.get(key);
}
public void printStat() {
Map stats = client.stats();
Set keys = stats.keySet();
Iterator keyIter = keys.iterator();
while (keyIter.hasNext()) {
String key = (String)keyIter.next();
Object value = stats.get(key);
System.out.println(key + "=" + value);
}
}
}
(6)MCTest -- 简单测试
import java.util.ArrayList;
import java.util.List;
public class MCTest {
public static void main(String[] args) {
try {
MemcachedServer server = new MemcachedServer("localhost", 11211, 1);
List servers = new ArrayList();
servers.add(server);
MemcachedPool pool = MemcachedPool.getInstance();
pool.initPool(servers);
MemcachedCli client = MemcachedCli.getInstance();
String value = (String)client.get("test1");
System.out.println("value=" + value);
client.set("test1", "value1");
value = (String)client.get("test1");
System.out.println("value=" + value);
client.printStat();
} catch (MemcachedException e) {
e.printStackTrace();
}
}
}
测试运行结果,其中有memcached client包的调试信息:
com.danga.MemCached.MemCachedClient Sun Nov 29 00:23:54 CST 2009 - ++++ retrieving object and stuffing into a string.
value=value1
com.danga.MemCached.MemCachedClient Sun Nov 29 00:23:54 CST 2009 - ++++ storing data as a string for key: test1 for class: java.lang.String
com.danga.MemCached.MemCachedClient Sun Nov 29 00:23:54 CST 2009 - ++++ memcache cmd (result code): set test1 0 0 6
(STORED)
com.danga.MemCached.MemCachedClient Sun Nov 29 00:23:54 CST 2009 - ++++ data successfully stored for key: test1
com.danga.MemCached.MemCachedClient Sun Nov 29 00:23:54 CST 2009 - ++++ retrieving object and stuffing into a string.
value=value1
localhost:11211={bytes_written=587, connection_structures=11, bytes=52, total_items=2, total_connections=21, uptime=284045336, pid=1416, get_hits=3, curr_items=1, version=1.2.1, cmd_get=4, time=1259425433, pointer_size=32, cmd_set=2, limit_maxbytes=67108864, bytes_read=162, curr_connections=10, get_misses=1}
java memcachedclient_memcached client — memcached client for java使用 | 学步园相关推荐
- java 正则 栈溢出_关于Java正则引起的StackOverFlowError问题以及解决方案 | 学步园...
java 正则异常 java.lang.StackOverflowError: 在使用正则表达式的时候,底层是通过迭代方式执行的,每一层的迭代都会在栈线程的大小中占一定内存,如果迭代的层次很多,就会报 ...
- java jri_Java调用R(二)_JRI | 学步园
推荐使用.相比RServe更灵活,效率更高. 基本步骤 1. R中需要安装rJava包. 2. 系统变量Path加上 C:\Program Files\R\R-3.0.1\bin\i386;C:\ ...
- java oval_Java对象校验框架Oval怎么使用 | 学步园
OVal是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件.Annotation.POJOs进行设定.可以使用纯Java语言.JavaScript.Groovy.BeanShell等进 ...
- java 调用mysql视图_java 访问数据库视图 | 学步园
工作多年调用视图到多次,自己写代码使用视图还是头一回,也觉得新鲜,那就开始呗, 数据库系统是Oracle 1 我用的数据库连接客户端是Navicat ,首先创建视图,其实视图就是调用表的操作,提取自己 ...
- java有关地址的讲解_Java迭代器讲解 | 学步园
迭代器在其实就是指针,读取集合或者数组中的一个值,读完以后又指向下一条数据. iterator() 迭代器只读,不能改效率要比for循环高 迭代器的一些方法: HasNext() 如果仍有元素可以迭代 ...
- java console清屏_JAVA 控制台清屏 | 学步园
看到网上有人讨论Java如何实现对控制台清屏,看到的内容不是很理想.所以把这些内容总结一下. 直观一点,先看下代码吧 import static java.lang.System.out; /** * ...
- java qq在线客服,Java获得腾讯QQ在线状态(.net webservice) | 学步园
看到网络上提供有获得腾讯QQ在线状态的webservice接口,就马上去验证了一把.我使用axis写的客户端代码,并非使用eclipse根据wsdl文件生成的.短短的几行代码就搞定了,webservi ...
- java webservice 天气预报_java 调用天气预报的webservice | 学步园
网上有很多例子,但我还是试了好多遍才走通,代码如下: import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; imp ...
- java bean命名规范_JavaBean 成员命名规范 | 学步园
在eclipse中自动生成setters()和getters() User.java private boolean active ; //getter() public boolean isActi ...
最新文章
- python输入输出流详解_Python 初体验之 输入输出流
- python不包含某字符,查找不包含某些文本字符串的所有文本文件
- QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)
- SCCM2012升级SP1系列之配置管理SCCM2012①发现和管理SCCM2012客户端
- POJ 3254 状态压缩DP
- 阿基米德椭圆规原理,你看懂了吗?
- Linux下配置CollabNet Subversion Edge
- 应用架构的核心使命是什么?阿里高级技术专家这样说
- python and or优先级_python的and和or优先级
- Silverlight 5 RC新特性探索系列:15.Silverlight 5 RC 对OpenType字体属性的支持
- 毕设题目:Matlab车辆计数
- android 微信朋友圈相册封面裁剪的小秘密
- V-By-One协议说明
- Dynamics CRM 365零基础入门学习(五)权限管理
- android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
- Lua学习笔记-OOP面向对象
- 关于tomcat中Host中appBase与docBase的关系
- chatter投稿&メール通知
- win10创建Ubuntu16.04子系统,安装常用软件以及图形界面(包括win10远程桌面连接Ubuntu)
- 计算机综合评价论文,关于模糊综合评价记忆计算机英语论文
热门文章
- 用faster-rcnn训练自己的数据集(VOC2007格式,python版)
- Windows下用VS2013加载caffemodel做图像分类
- Linux之Ansible入门用法(实验解析)
- 一、MySQL数据库基础
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
- UDP socket 设置为的非阻塞模式
- Java中sleep,wait,yield,join的区别
- WebLogic 12c 修改节点 Managed Server 和 AdminServer 内存方法
- Swing开发界面时的一个bug复盘
- 一次有趣的XSS漏洞挖掘分析(1)