CacheManagerUtils.java
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的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
随机推荐
- 【转】使用Apache Kylin搭建企业级开源大数据分析平台
http://www.thebigdata.cn/JieJueFangAn/30143.html 本篇文章整理自史少锋4月23日在『1024大数据技术峰会』上的分享实录:使用Apache Kylin搭 ...
- codeforces 286 div2 B
思路:质因子累乘的值即为所求#include<iostream> #include<algorithm> #include<stdio.h> #include< ...
- 587A
#include<iostream> #include<algorithm> #include<stdio.h> #include<stdlib.h> ...
- caffe配置python环境
make pycaffe 在python中import caffe
- 常用函数的DTFT变换对和z变换对
直接从书上抓图的,为以后查表方便 1.DTFT 2.z变换对
- DOM--5 动态修改样式和层叠样式表
W3C DOM2 样式规范 CSSStyleSheet对象 表示所有css样式表,包括外部link和嵌入style的;通过document.styleSheets属性可以获得文档中CSSStyleSh ...
- XAML数据绑定(Data Binding)
XAML数据绑定(Data Binding) Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中 ...
- js从字符串中提取身份证号,连续18位数字
<!DOCTYPE html> <html> <head> <title>提取身份证号</title> <meta charset=& ...
- python闭包与装饰器
转自小马哥: 闭包和装饰器充分体现了Python语法糖的优雅感觉. 在本文中,我们的实验要完成两个工作,一个是加法,一个是累计调用加法的次数,最普通的Python程序可以这么写: def valida ...
- jQuery入门第一天
使用jQuery之前,我们需要加一些代码到HTML文件中. 首先在页面顶端增加一行script元素,然后写上结束符. 浏览器会运行script 里所有的Javascript,包括jQuery. 在你的 ...