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 ...
随机推荐
- Loadrunne实现多个场景运行
如何让Loadrunne实现多个场景运行? 场景分析: 有3个不同的场景,分别为搜索,下载,上传,其中3个场景执行顺序为按照搜索->下载->上传流程操作:哪么如何让Loadrunner中如 ...
- MVC3实现多个按钮提交
有时我们需要在同一个Form表单中进行多个按钮的提交,来完成不同的功能.因为MVC中一个表单默认只能提交到一个Action处理,相对比较麻烦. 1.使用客户端脚本 我们可以view中加上如下代码: & ...
- Android优化
ListView的优化 复用convertview , 历史的view对象 减少子孩子查询的次数 viewholder 异步加载数据(把图片缓存) 条目多时分页加载数据 加载时显示进度条让用户等待 I ...
- PHP 自带查询运行内存的函数
memory_get_usage - 返回分配给 PHP 的内存量 int memory_get_usage ([ bool $real_usage = false ] ) 返回当前分配给你的 PHP ...
- js小例子(标签页)
运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...
- 解决js小数求和出现多位小数问题
在小数相加时,可能会产生多个小数位.如下所示: var x=1+1; //2 var x=1.20+1.11; //2.31 var x=1.56+1.76; //3.3200000000 ...
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout
K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...
- 【原】iOS学习42即时通信之XMPP(1)
1. 即时通信 1> 概述 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能 ...
- [转]基于gulp和webpack的前端工程化
本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux ...
- Android MuPDF 阅读PDF文件
MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...