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 - 14 ] python进程及线程编程

    什么是进程: 简单来讲,进程就是操作系统中运行的程序或任务,进程和程序的区别在于进程是动态的,而程序是静态的.进程是操作系统资源管理的最小单位. 什么是线程: 线程是进程的一个实体,是cpu调度和分派 ...

  2. krpano--控制热点跳转到场景的指定视角

    krpano课堂(肥宗) · 2015-07-13 19:32 有这么一种情况,假设我们用三个场景,这三个场景恰好是一条街道的同一方向的三个拍摄点.如上图. 我们可以通过设置A.B.C三个场景中的vi ...

  3. jQuery-niceScroll使用中父子div都存在滚动条导致错位的问题

    1.做项目时因为客户要求改变了项目的整体样式,所以导致浏览器自带的滚动条样式与项目的样式风格格格不入,所以要使用一个滚动条插件来替换浏览器自带的滚动条,我在网上搜了下,发现niceScroll这个滚动 ...

  4. DRF基类APIView提供的Request、Response和序列化器的综合使用

    关于DRF基类APIView提供的Request和Response对象的作用,可以看我的另一篇博文:https://www.cnblogs.com/chichung/p/9939864.html 综合 ...

  5. 【计算机网络】wireshark抓包分析1

    学习计算机网络很久了,但总是局限于书本知识,感觉get不到重点.经师兄建议用wireshark抓包分析看看. 我自己以前并没有做过抓包分析,所以这篇博文可能会有很多错误,只是我自己的一个记录,路过的亲 ...

  6. hdu 5185(动态规划)

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  7. STL模板整理 map

    map容器: 继上一篇 ,Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能 ...

  8. eclispe新导入的文件有个小红叉号(x)的问题

    关于这个问题,我百度了很久,后面发现很简单的就解决了:我觉得可能大家的问题不一样,或许解决方法可能是一样的: 参考链接:https://zhidao.baidu.com/question/616762 ...

  9. SecureCRT的安装、介绍、简单操作

    网上看到一篇名为<SecureCRT的使用方法和技巧(详细使用教程)>的secureCRT教程,可能软件版本与我不一样我安装的是8.1. 原文来源:http://www.jb51.net/ ...

  10. [BZOJ5463][APIO2018]铁人两项(圆方树DP)

    题意:给出一张图,求满足存在一条从u到v的长度大于3的简单路径的有序点对(u,v)个数. 做了上一题[HDU5739]Fantasia(点双连通分量+DP),这个题就是一个NOIP题了. 一开始考虑了 ...