package com.ibs.auth.controller;

import java.io.UnsupportedEncodingException;

import java.util.Date;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import com.whalin.memcached.MemCachedClient;

import com.whalin.memcached.SockIOPool;

public class MemCachedManager {

// 创建全局的唯一实例

protected static MemCachedClient mcc = new MemCachedClient();

protected static MemCachedManager memCachedManager = new MemCachedManager();

// 设置与缓存服务器的连接池

static {

// 服务器列表和其权重

String[] servers = { "127.0.0.1:11211" };

Integer[] weights = { 3 };

// 获取socke连接池的实例对象

SockIOPool pool = SockIOPool.getInstance();

// 设置服务器信息

pool.setServers(servers);

pool.setWeights(weights);

// 设置初始连接数、最小和最大连接数以及最大处理时间

pool.setInitConn(5);

pool.setMinConn(5);

pool.setMaxConn(250);

pool.setMaxIdle(1000 * 60 * 60 * 6);

//设置主线程睡眠时间,每3秒苏醒一次,维持连接池大小

//maintSleep 千万不要设置成30,访问量一大就出问题,单位是毫秒,推荐30000毫秒。

pool.setMaintSleep(30);

// 设置TCP的参数,连接超时等

pool.setNagle(false);

pool.setSocketTO(3000);

pool.setSocketConnectTO(0);

// 初始化连接池

pool.initialize();

// 压缩设置,超过指定大小(单位为K)的数据都会被压缩

//mcc.setCompressEnable(true);

//mcc.setCompressThreshold(64 * 1024);

}

/**

* 保护型构造方法,不允许实例化!

*

*/

protected MemCachedManager() {

}

/**

* 获取唯一实例.

*

* @return

*/

public static MemCachedManager getInstance() {

return memCachedManager;

}

/**

* 添加一个指定的值到缓存中.

*

* @param key

* @param value

* @return

*/

public boolean add(String key, Object value) {

return mcc.add(key, value);

}

public boolean add(String key, Object value, Date expiry) {

return mcc.add(key, value, expiry);

}

public boolean replace(String key, Object value) {

return mcc.replace(key, value);

}

public boolean replace(String key, Object value, Date expiry) {

return mcc.replace(key, value, expiry);

}

public boolean set(String key,Object value){

return mcc.set(key, value);

}

/**

* 根据指定的关键字获取对象.

*

* @param key

* @return

*/

public Object get(String key) {

return mcc.get(key);

}

/**

* 删除key

*/

public boolean delete(String key){

return mcc.delete(key);

}

public static Map<String,Object> getKeysForMap() throws UnsupportedEncodingException{

Map<String,Object> keylist=new HashMap<String,Object>();

//遍历statsItems 获取items:2:number=14

Map<String,Map<String,String>> statsItems=mcc.statsItems();

Map<String,String> statsItems_sub=null;

String statsItems_sub_key=null;

int items_number=0;

String server=null;

//根据items:2:number=14,调用statsCacheDump,获取每个item中的key

Map<String,Map<String,String>> statsCacheDump=null;

Map<String,String> statsCacheDump_sub=null;

String statsCacheDumpsub_key=null;

String statsCacheDumpsub_key_value=null;

for (Iterator iterator=statsItems.keySet().iterator();iterator.hasNext();) {

server=(String) iterator.next();

statsItems_sub=statsItems.get(server);

//System.out.println(server+"==="+statsItems_sub);

for (Iterator iterator_item=statsItems_sub.keySet().iterator();iterator_item.hasNext();) {

statsItems_sub_key=(String) iterator_item.next();

//System.out.println(statsItems_sub_key+":=:"+bb);

//items:2:number=14

if (statsItems_sub_key.toUpperCase().startsWith("items:".toUpperCase()) && statsItems_sub_key.toUpperCase().endsWith(":number".toUpperCase())){

items_number=Integer.parseInt(statsItems_sub.get(statsItems_sub_key).trim());

//System.out.println(statsItems_sub_key+":=:"+items_number);

statsCacheDump=mcc.statsCacheDump(new String[]{server},Integer.parseInt(statsItems_sub_key.split(":")[1].trim()), items_number);

for (Iterator statsCacheDump_iterator=statsCacheDump.keySet().iterator();statsCacheDump_iterator.hasNext();) {

statsCacheDump_sub=statsCacheDump.get(statsCacheDump_iterator.next());

//System.out.println(statsCacheDump_sub);

for (Iterator iterator_keys=statsCacheDump_sub.keySet().iterator();iterator_keys.hasNext();) {

statsCacheDumpsub_key=(String) iterator_keys.next();

statsCacheDumpsub_key_value=statsCacheDump_sub.get(statsCacheDumpsub_key);

System.out.println(statsCacheDumpsub_key);//key是中文被编码了,是客户端在set之前编码的,服务端中文key存的是密文

System.out.println(statsCacheDumpsub_key_value);

keylist.put(statsCacheDumpsub_key,statsCacheDumpsub_key_value);

} }

}

}

}

return keylist;

}

public static void main(String[] args) {

MemCachedManager cache = MemCachedManager.getInstance();

try {

Map<String,Object> map=getKeysForMap();

for(int i=0;i<map.size();i++){

if(map.containsKey("1")){

System.out.println("it's OK");

}

}

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

cache.add("hello", 234);

System.out.print("get value : " + cache.get("hello"));

}

}

MemCached的工具类。获取cached中的所有key的更多相关文章

  1. [工具类]获取url中参数列表

    写在前面 在项目中经常用到解析url中参数的逻辑,今天先下载就自己封装了一个方法,方便以后使用的时候,信手拈来.当然这里给出的方法是针对常见的url参数类型的,对于重写url,或者路由格式的不考虑. ...

  2. Spring普通类/工具类获取并调用Spring service对象的方法

    参考<Spring普通类获取并调用Spring service方法>,网址:https://blog.csdn.net/jiayi_0803/article/details/6892455 ...

  3. 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。

    1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...

  4. 获取redis中所有的key,清空整个 Redis 服务器的数据

    获取 redis 中所有的 key 可用使用 *. redis 127.0.0.1:6379> KEYS * Redis Flushall 命令用于清空整个 Redis 服务器的数据(删除所有数 ...

  5. jeecg中的一个上下文工具类获取request,session

    通过调用其中的方法可以获取到request和session,调用方式如下: HttpServletRequest request = ContextHolderUtils.getRequest();H ...

  6. spring项目中 通过自定义applicationContext工具类获取到applicationContext上下文对象

    spring项目在服务器启动的时候 spring容器中就已经被创建好了各种对象,在我们需要使用的时候可以进行调用. 工具类代码如下 import org.springframework.beans.B ...

  7. Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

    Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...

  8. 工具类:mybatis中使用Threadlocal开启session及关闭session

    1.线程容器,给线程绑定一个Object 内容,后只要线程不变,可以随时取出. 1.1 改变线程,无法取出内容. final ThreadLocal threadLocal = new ThreadL ...

  9. java工具类 获取包下所有类

    extends:http://blog.csdn.net/jdzms23/article/details/17550119 package com.threeti.util; import java. ...

随机推荐

  1. 【设计模式】【最后一个】结构型07适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern) 推荐一个很全面的博客:https://blog.csdn.net/zxt0601/article/details/52848004 定义:将一个类的接口转 ...

  2. Nginx部署多个站点

    Nginx部署多个站点 一,介绍与需求 1.1,介绍 详细介绍请看nginx代理部署Vue与React项目,在这儿主要介绍多个站点的配置 1.2,需求 有时候想在一台服务器上为不同的域名/不同的二级域 ...

  3. 吐槽:那些Java设计中不得不说的槽点

    1. 求长度各有千秋 你是否曾经在面试的时候,经常被问到:数组有没有 length() 方法?字符串有没有 length() 方法? 集合有没有 length() 方法? 面对这个问题,那么不得不吐槽 ...

  4. 爱,死亡和机器人(Love,Death&Robots)

    从我自己的角度来讲,我真的是很喜欢这部短片,奇幻,科幻,喜剧交叉在一起构成了这18部短片.精彩绝伦,我只能这么去形容. 但是有没有不足呢?客观的来说,也存在不足,过度的吹捧使得有些人神话了它,认为立意 ...

  5. K2工作流引擎Demo

    ---恢复内容开始--- 以前的工作都是电商网站形式的,从未接触过工作流相关工作,新公司是传统制造业行业,我进的这个组又是做工作流这块相关工作的,所以避免不了和工作流打交道. 这边工作流主要用K2来做 ...

  6. HashMap源码分析(一):JDK源码分析系列

    正文开始 注:JDK版本为1.8 HashMap1.8和1.8之前的源码差别很大 目录 简介 数据结构 类结构 属性 构造方法 增加 删除 修改 总结 1.HashMap简介 HashMap基于哈希表 ...

  7. WinForm控件之【DateTimePicker】

    基本介绍 时间控件应用较为广泛,属性设置项也比较完善是非常好用的控件. 常设置属性.事件 CustomFormat:当Format属性设置为自定义类型时可自定义控件时间的显示格式: Enabled:指 ...

  8. Kafka部署

    Kafka依赖Zookeeper,虽然Kafka自带zookeeper,但是建议单独部署,所以先部署Zookeeper. 测试环境 citus1,citus2,citus3三台机器.对主机名和ip在/ ...

  9. VMware上安装虚拟机-教程

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! - ...

  10. 【CYH-02】NOIp考砸后虐题赛:转换式:题解

    这道题真的不难吧. 如@AKEE@AKEE@AKEE 大佬所说,此题的确可以将n推广到一般情况. 但题面还是良心的只到了N<=4N<=4N<=4 以目前的题目来看,简单模拟即可. 分 ...