public class MapCache {

     /**
* 默认存储1024个缓存
*/
private static final int DEFAULT_CACHES = 1024; private static final MapCache INS = new MapCache(); public static MapCache single() {
return INS;
} /**
* 缓存容器
*/
private static Map<String, CacheObject> cachePool; public MapCache() {
this(DEFAULT_CACHES);
} public MapCache(int cacheCount) {
cachePool = new ConcurrentHashMap(cacheCount);
} /**
* 读取一个缓存
*
* @param key 缓存key
* @param <T>
* @return
*/
public static <T> T get(String key) {
CacheObject cacheObject = cachePool.get(key);
if (null != cacheObject) {
long cur = System.currentTimeMillis() / 1000;
if (cacheObject.getExpired() <= 0 || cacheObject.getExpired() > cur) {
Object result = cacheObject.getValue();
return (T) result;
}
}
return null;
} /**
* 读取一个hash类型缓存
*
* @param key 缓存key
* @param field 缓存field
* @param <T>
* @return
*/
public <T> T hget(String key, String field) {
key = key + ":" + field;
return this.get(key);
} /**
* 设置一个缓存
*
* @param key 缓存key
* @param value 缓存value
*/
public static void set(String key, Object value) {
INS.set(key, value, -1);
} /**
* 设置一个缓存并带过期时间
*
* @param key 缓存key
* @param value 缓存value
* @param expired 过期时间,单位为秒
*/
public void set(String key, Object value, long expired) {
expired = expired > 0 ? System.currentTimeMillis() / 1000 + expired : expired;
CacheObject cacheObject = new CacheObject(key, value, expired);
cachePool.put(key, cacheObject);
} /**
* 设置一个hash缓存
*
* @param key 缓存key
* @param field 缓存field
* @param value 缓存value
*/
public void hset(String key, String field, Object value) {
this.hset(key, field, value, -1);
} /**
* 设置一个hash缓存并带过期时间
*
* @param key 缓存key
* @param field 缓存field
* @param value 缓存value
* @param expired 过期时间,单位为秒
*/
public void hset(String key, String field, Object value, long expired) {
key = key + ":" + field;
expired = expired > 0 ? System.currentTimeMillis() / 1000 + expired : expired;
CacheObject cacheObject = new CacheObject(key, value, expired);
cachePool.put(key, cacheObject);
} /**
* 根据key删除缓存
*
* @param key 缓存key
*/
public static void del(String key) {
cachePool.remove(key);
} /**
* 根据key和field删除缓存
*
* @param key 缓存key
* @param field 缓存field
*/
public void hdel(String key, String field) {
key = key + ":" + field;
this.del(key);
} /**
* 清空缓存
*/
public void clean() {
cachePool.clear();
} static class CacheObject {
private String key;
private Object value;
private long expired; public CacheObject(String key, Object value, long expired) {
this.key = key;
this.value = value;
this.expired = expired;
} public String getKey() {
return key;
} public Object getValue() {
return value;
} public long getExpired() {
return expired;
}
}
}

转载处:https://blog.csdn.net/xsj_blog/article/details/83056143

最新文章

  1. 看懂Oracle执行计划
  2. 支付宝APP支付开发- IOException : DER input, Integer tag error
  3. HDU - Pseudoforest
  4. (转载)CSS分别设置Input样式(按input类型)
  5. VS2015 企业版不支持 JavaScript 语法高亮、智能提醒
  6. weblogic生产、开发模式互转
  7. B进制加法(洛谷1604)
  8. Java基础学习笔记二十一 多线程
  9. LVS负载均衡群集(NAT)
  10. .NET MVC 控制器和行为
  11. POJ 3660 Cow Contest. (传递闭包)【Floyd】
  12. Instruments leak黑魔法定位内存泄漏
  13. JS控制上传文件个数
  14. Activity的LaunchMode应用场景思考
  15. DataTables使用总结
  16. 2016-2017-2 20155227实验二《Java面向对象程序设计》实验报告
  17. iOS 9的新的改变 iOS SDK Release Notes for iOS 9 说了些改变
  18. 基于Consul+Upsync+Nginx实现动态负载均衡
  19. java 静态代理 JDK动态代理 Cglib动态代理
  20. jquery表单数据验证扩展方法

热门文章

  1. nginx proxy_pass 指令
  2. 红黑树与AVL树比较
  3. VIJOS-P1294 拯救OIBH总部
  4. 博客索引and题目列表
  5. nginx lnmp之nginx+php
  6. limits.conf文件修改注意事项,限制文件描述符数和进程数
  7. http 默认端口
  8. 【Gamma】“北航社团帮”展示博客
  9. 【IntelliJ IDEA学习之八】版本控制之SVN
  10. spark 通过keytab 获取认证