package com.vcredit.framework.utils;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

/**
* <pre>
* Cache缓存工具
* 1. 微信调用Token、JsApiTicket要缓存7200秒,生成频率有限制不缓存会影响业务
* 2. 短信验证码缓存,有效时间5分钟
*
* </pre>
*/
public class CacheManagerUtils {
private static CacheManagerUtils cacheUtils = null;
private static final CacheManager manager = CacheManager.create();
private static final long default_time = 1800;

public static enum CACHE_TYPE {
RANDOM, WEIXIN, DEFAULT_CACHE
}

/**
* Construct
*/
private CacheManagerUtils() {
/**
* 随机码缓存
*/
if (!manager.cacheExists(CACHE_TYPE.RANDOM.name())) {
Cache cache = getNewIfNotPresent(CACHE_TYPE.RANDOM, 300);
manager.addCacheIfAbsent(cache);
}

/**
* 微信缓存 7200秒, 设置7000秒过期
*/
if (!manager.cacheExists(CACHE_TYPE.WEIXIN.name())) {
Cache cache = getNewIfNotPresent(CACHE_TYPE.WEIXIN, 7000);
manager.addCacheIfAbsent(cache);
}

/**
* 系统缓存 24h
*/
if (!manager.cacheExists(CACHE_TYPE.DEFAULT_CACHE.name())) {
Cache cache = getNewIfNotPresent(CACHE_TYPE.DEFAULT_CACHE, 3600 * 24);
manager.addCacheIfAbsent(cache);
}
}

/**
* 添加缓存值
*
* @param cacheName
* @param key
* @param value
*/
public static void addValue(CACHE_TYPE cacheName, Object key, Object value) {
getInstance();
Cache cache = getCache(cacheName);
if (cache == null) {
manager.addCache(getNewIfNotPresent(cacheName, default_time));
}
cache = getCache(cacheName);
cache.put(new Element(key, value));
}

/**
* 添加缓存值
*
* @param cacheName
* @param key
* @param value
*/
public static void addValue(CACHE_TYPE cacheName, Object key, Object value, int expires) {
getInstance();
Cache cache = getCache(cacheName);
if (cache == null) {
manager.addCache(getNewIfNotPresent(cacheName, default_time));
}
cache = getCache(cacheName);
cache.put(new Element(key, value, expires, expires));
}

/**
* 获取缓存值
*
* @param cacheName
* @param key
* @return Object
*/
public static Object getValue(CACHE_TYPE cacheName, Object key) {
getInstance();
Cache cache = getCache(cacheName);
if (cache == null || cache.get(key) == null || cache.get(key).isExpired()) {
return null;
}
return cache.get(key).getObjectValue();
}

/**
* 添加缓存值
*
* @param cacheName
* @param key
* @param value
*/
public static void addValue(Object key, Object value) {
addValue(CACHE_TYPE.DEFAULT_CACHE, key, value);
}

/**
* 获取缓存值
*
* @param cacheName
* @param key
* @return Object
*/
public static Object getValue(Object key) {
return getValue(CACHE_TYPE.DEFAULT_CACHE, key);
}

/**
* 如果缓存不存在创建缓存
*
* @param cacheName
* @param time
* @return Cache
*/
private static Cache getNewIfNotPresent(CACHE_TYPE cacheName, long time) {
String name = cacheName.name();
if (manager.cacheExists(name)) {
return manager.getCache(name);
}
return new Cache(name, 1000, false, false, time, time);
}

/**
* 获取缓存, 如果不存在返回null
*
* @param cacheName
* @return Cache
*/
private static Cache getCache(CACHE_TYPE cacheName) {
String name = cacheName.name();
return manager.getCache(name);
}

private static synchronized CacheManagerUtils getInstance() {
if (cacheUtils == null) {
cacheUtils = new CacheManagerUtils();
}
return cacheUtils;
}

}

CacheManagerUtils.java的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

随机推荐

  1. 苹果推送(APNs)ios push小结

    把app删除后就推送不成功了,可以看出deviceToken应该是设备+app来一起识别的,重新安装后仍然为同一个 简介 推送服务APNs(Apple Push Notification servic ...

  2. hdu1078 dp(递推)+搜索

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1078 题意:老鼠从(1.1)点出发,每次最多只能走K步,而且下一步走的位置的值必须必当前值 ...

  3. iOS Xcode注释的几种使用方法

    1.#pragma mark - 方法分割线 2.#pragma mark 要备注的内容 3.// MARK: 要备注的内容 4.// FIXME: 要备注的内容 5.// TODO: 要备注的内容 ...

  4. Android 自动化测试—robotium(八) 拖拽

    本文来源于:http://xiaomaozi.blog.51cto.com/925779/933056 SeekBar控件 代码实现:http://luwenjie.blog.51cto.com/92 ...

  5. C#性能测试方法

    用 System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); for (int i ...

  6. CF# Educational Codeforces Round 3 F. Frogs and mosquitoes

    F. Frogs and mosquitoes time limit per test 2 seconds memory limit per test 512 megabytes input stan ...

  7. ccc autotest

    module.exports.assert = function (express,value,msg) { if(express==value) { cc.info("test:" ...

  8. CSS抗锯齿 font-smoothing 属性介绍

    CSS3里面加入了一个“-webkit-font-smoothing”属性. 这个属性可以使页面上的字体抗锯齿,使用后字体看起来会更清晰舒服. 加上之后就顿时感觉页面小清晰了. 淘宝也在用哦! 它有三 ...

  9. odeforces Beta Round #77 (Div. 2 Only)

    A. Football time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  10. [WP8.1UI控件编程]Windows Phone大数据量网络图片列表的异步加载和内存优化

    11.2.4 大数据量网络图片列表的异步加载和内存优化 虚拟化技术可以让Windows Phone上的大数据量列表不必担心会一次性加载所有的数据,保证了UI的流程性.对于虚拟化的技术,我们不仅仅只是依 ...