0.个人标签

我的CSDN博客地址: http://blog.csdn.net/caicongyang

1.依赖的jar包

commons-pool-1.5.6.jar

slf4j-api-1.6.1.jar

java_memcached-release_2.6.6.jar

slf4j-simple-1.6.1.jar

2.DangaMemCacheClient.java

package com.ccy.comm.utils;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock; import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool; /**
* <p>
* Title: DangaMemCacheClient.java
* Package
* </p>
* <p>
* Description: MemCacheClient Utils类
* <p>
* @author Tom.Cai
* @created 2015-7-16 下午3:49:24
* @version V1.0
*
*/
public class DangaMemCacheClient {
private static DangaMemCacheClient instance = null;
private static ReentrantLock lock = new ReentrantLock();
private MemCachedClient mc;
private static int expTime = 3600 * 24 * 30;
private static String address="192.168.253.132";
private static String port="12000"; public static DangaMemCacheClient getInstance() {
if (instance == null) {
lock.lock();
try {
if (instance == null) {
instance = new DangaMemCacheClient();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
return instance;
} private DangaMemCacheClient() {
try {
mc = new MemCachedClient();
String[] servers = { address+":"+port };
Integer[] weights = { 10 }; SockIOPool pool = SockIOPool.getInstance(); pool.setServers(servers);
pool.setWeights(weights); pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaxIdle(expTime); pool.setMaintSleep(30); pool.setNagle(false);
pool.setSocketTO(30);
pool.setSocketConnectTO(0); pool.initialize(); } catch (Exception e) {
e.printStackTrace();
}
} public Object getObject(String key) {
return mc.get(key);
} public boolean setObject(String key, Object value) {
return mc.set(key, value);
} public boolean setObject(String key, Object value, long time) {
return mc.set(key, value, new Date(time));
} public boolean removeObject(String key) {
return mc.delete(key);
} /**
* 循环获取全部Memcache中的全部key
* @return
*/
public List<String> getKeys() {
List<String> keyList = new ArrayList<String>();
Map slabs = mc.statsItems();
Iterator itemsItr = slabs.keySet().iterator();
while (itemsItr.hasNext()) {
String serverInfo1 = itemsItr.next().toString();
// 取得這個server的各種 status [itemname:number:field=value]
Map itemNames = (Map) slabs.get(serverInfo1);
Iterator itemNameItr = itemNames.keySet().iterator();
// 以status key值去迴圈
while (itemNameItr.hasNext()) {
String itemName = itemNameItr.next().toString();
// 拆解status 欄位
// itemAtt[0] = itemname
// itemAtt[1] = CacheDump的参數
// itemAtt[2] = field:number or age
String[] itemAtt = itemName.split(":");
if (itemAtt[2].startsWith("number")) {
Map chcheDump = mc.statsCacheDump(Integer.parseInt(itemAtt[1]), 0);
Iterator itr = chcheDump.keySet().iterator();
int i = 0;
while (itr.hasNext()) {
String serverInfo2 = itr.next().toString();
Map items = (Map) chcheDump.get(serverInfo2);
Iterator keyItr = items.keySet().iterator();
while (keyItr.hasNext()) {
String key = keyItr.next().toString();
String memKey = key;
i++;
try {
key = URLDecoder.decode(key, "UTF-8");
String value = ((String) items.get(memKey));
value = value.substring(value.indexOf(";") + 2, value.indexOf(" s"));
Date date = new Date();
date.setTime(Long.valueOf(value + "000"));
keyList.add(key);
} catch (Exception ex) {
}
} }
}
}
}
return keyList;
} public static void main(String[] args) throws UnsupportedEncodingException {
DangaMemCacheClient dmcc = DangaMemCacheClient.getInstance();
dmcc.setObject("ccy0", "test0");
dmcc.setObject("ccy1", "test1");
System.out.println((String)dmcc.getObject("ccy0"));
System.out.println((String)dmcc.getObject("ccy1")); List<String> list = dmcc.getKeys();
for(String key : list){
System.out.println(key);
} }
}

3.说明

本人将其写成一个工具来适用于仅仅缓存不存数据库的情况,当然能够写一个service在供spring来调用!



我的CSDN博客地址: http://blog.csdn.net/caicongyang



Memcachedclientutils类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. python中的闭包与装饰器

    #原创,转载请留言联系 装饰器的本质就是闭包,所以想知道装饰器是什么,首先要理解一下什么是闭包. 闭包 1. 外部函数返回内部函数的引用.2. 内部函数使用外部函数的变量或者参数. def outer ...

  2. 在web项目下注册MySQL数据库驱动失败

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at org.apache.catalina.loader.WebappClassLoa ...

  3. BZOJ 1036: [ZJOI2008]树的统计Count-树链剖分(点权)(单点更新、路径节点最值、路径求和)模板,超级认真写了注释啊啊啊

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 23015  Solved: 9336[Submit ...

  4. Android的日志工具Log

    Android中的日志工具类是Log(android.util.Log),这个类提供了以下几个方法来供我们打印日志. ♦ Log.v():这个方法用于打印那些最为琐碎的,意义最小的日志信息.对应级别v ...

  5. 【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量

    跑出最短路图,然后把结点拆点跑最大流. #include<cstdio> #include<queue> #include<cstring> #include< ...

  6. 【块状链表】AutSky_JadeK的块状链表模板+总结(STL版)

    Part 1.块状链表.   定位 插入 删除 数组 O(1) O(n) O(n) 链表 O(n) O(1) O(1) 对于线性表的以上常见操作来说,数组和链表都无法有效地解决.但是,若我们将链表的每 ...

  7. FireDac Pooling

    1.建立FDManager的ConnectionDef.并设置此Pooling为True. 2.建立Thread类进行多个FDConnection连接DB. 3.本列是oracle远程数据.如下图: ...

  8. codevs与noi做题改错本目录

    从2016.2.13开始: 1.  排序超时的问题---------目录:-测试习题 2.  超高精度乘法超时问题-----------目录:高精度计算 算法:快速傅里叶算法. 压位算法 3. 高精度 ...

  9. Linux防止“rm -rf /”误删除

    说明:不解释了,运维应该在每台服务器都去配置这个问题以减少灾难的发生 方法: 1.safe-rm safe-rm是一个开源软件用来替代不太安全的rm,可以在/etc/safe-rm.conf中配置路径 ...

  10. 使用ReadOnlyCollection创建只读集合

    转载:http://www.cnblogs.com/abatei/archive/2008/02/04/1064102.html 使用泛型创建只读集合 问题 您希望类中的一个集合里的信息可以被外界访问 ...