Java 使用 Map 实现缓存工具

摘要:
以下代码在互联网上引用,并进行了轻微修改。此代码实现了定期清除临时缓存的功能。缓存管理类1packagecom.wbproject.util。隐藏物23导入java.time。本地日期时间;4导入java.time.format。日期时间格式设置工具;5导入java.util。日期6导入java.util。HashMap;7导入java.util。HashSet;8导入java.util。迭代器;9导入java.util。地图10导入java.util。设置1112/**13*缓存管理类14*15*@authorwangbo16*@date2018-03-0712:43:4117*/18publicclassCacheManage{1920privatestaticMap<Object,Object>cacheMap=newHashMap<˃();2122privateStation<Object,CacheConfModel>cacheConfMap=newHashMap<˃CacheManagegetInstance(){32if{33cm=newCacheManage();34//首次获取实例时启动线程35Thread=newClearCache();36t.Start();37}38returncm;39}4041/**42*添加缓存实体43*44*@paramkey45*@paramvalue46*@paramccm47*@return48*/49publicpooldaddCache{50System.out.println;51booleanflag=false;52try{53cacheMap.put;54cacheConfMap.pput;55System.out.prprintln;56flag=true;57}catch{58e.printStackTrace();59}6061returnflag;62}6364/**65*获取缓存实体66*67*@paramkey68*@return69*/70publicObjectgetValue{71Objectobject=cacheMap.Get;72if(object!

以下代码参考于网上,做了小部分修改。

该代码实现了定时清除临时缓存的功能。

缓存管理类

  1 package com.wbproject.util.cache;
  2 
  3 import java.time.LocalDateTime;
  4 import java.time.format.DateTimeFormatter;
  5 import java.util.Date;
  6 import java.util.HashMap;
  7 import java.util.HashSet;
  8 import java.util.Iterator;
  9 import java.util.Map;
 10 import java.util.Set;
 11 
 12 /**
 13  * 缓存管理类
 14  *
 15  * @author wangbo
 16  * @date 2018-03-07 12:43:41
 17  */
 18 public class CacheManage {
 19 
 20     private static Map<Object, Object> cacheMap = new HashMap<>();
 21 
 22     private static Map<Object, CacheConfModel> cacheConfMap = new HashMap<>();
 23 
 24     private static CacheManage cm = null;
 25 
 26     // 构造方法私有化
 27     private CacheManage() {
 28     }
 29 
 30     // 获取实例
 31     public static CacheManage getInstance() {
 32         if (cm == null) {
 33             cm = new CacheManage();
 34             // 第一次获取实例的时候启动线程
 35             Thread t = new ClearCache();
 36             t.start();
 37         }
 38         return cm;
 39     }
 40 
 41     /**
 42      * 添加缓存实体
 43      * 
 44      * @param key
 45      * @param value
 46      * @param ccm
 47      * @return
 48      */
 49     public boolean addCache(Object key, Object value, CacheConfModel ccm) {
 50         System.out.println("开始增加缓存");
 51         boolean flag = false;
 52         try {
 53             cacheMap.put(key, value);
 54             cacheConfMap.put(key, ccm);
 55             System.out.println("增加缓存结束");
 56             flag = true;
 57         } catch (Exception e) {
 58             e.printStackTrace();
 59         }
 60 
 61         return flag;
 62     }
 63 
 64     /**
 65      * 获取缓存实体
 66      * 
 67      * @param key
 68      * @return
 69      */
 70     public Object getValue(Object key) {
 71         Object object = cacheMap.get(key);
 72         if (object != null) {
 73             return object;
 74         } else {
 75             return null;
 76         }
 77     }
 78 
 79     /**
 80      * 获取缓存数据的数量
 81      * 
 82      * @return
 83      */
 84     public int getSize() {
 85         return cacheMap.size();
 86     }
 87 
 88     /**
 89      * 删除缓存
 90      * 
 91      * @param key
 92      * @return
 93      */
 94     public boolean removeCache(Object key) {
 95         boolean flag = false;
 96         try {
 97             cacheMap.remove(key);
 98             cacheConfMap.remove(key);
 99             flag = true;
100         } catch (Exception e) {
101             e.printStackTrace();
102         }
103         return flag;
104     }
105 
106     /**
107      * 清除缓存的线程
108      */
109     private static class ClearCache extends Thread {
110         public void run() {
111             while (true) {
112                 // 记录要清除的key
113                 Set<Object> tempSet = new HashSet<>();
114                 Set<Object> set = cacheConfMap.keySet();
115                 Iterator<Object> it = set.iterator();
116                 while (it.hasNext()) {
117                     Object key = it.next();
118                     CacheConfModel ccm = (CacheConfModel) cacheConfMap.get(key);
119                     // 比较是否需要清除
120                     if (!ccm.isForever()) {
121                         if ((new Date().getTime() - ccm.getBeginTime()) >= ccm.getDurableTime() * 1000L) {
122                             // 可以清除,先记录下来
123                             tempSet.add(key);
124                         }
125                     }
126                 }
127                 // 真正清除
128                 Iterator<Object> tempIt = tempSet.iterator();
129                 while (tempIt.hasNext()) {
130                     Object key = tempIt.next();
131                     cacheMap.remove(key);
132                     cacheConfMap.remove(key);
133                 }
134                 
135                 LocalDateTime localDateTime = LocalDateTime.now();  
136                 System.out.println("当前时间为:" + localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + ",缓存大小==>" + cacheMap.size());
137                 // 线程休息
138                 try {
139                     Thread.sleep(60 * 10 * 1000L);
140                 } catch (InterruptedException e) {
141                     e.printStackTrace();
142                 }
143             }
144         }
145     }
146 
147 }

缓存配置实体类

 1 package com.wbproject.util.cache;
 2 
 3 /**
 4  * 缓存配置实体类
 5  *
 6  * @author wangbo
 7  * @date 2018-03-07 12:42:56
 8  */
 9 public class CacheConfModel implements java.io.Serializable {
10 
11     private static final long serialVersionUID = 1L;
12 
13     private long beginTime;// 缓存开始时间
14 
15     private int durableTime;// 持续时间,秒
16 
17     private boolean isForever = false;// 是否持久
18 
19     public long getBeginTime() {
20         return beginTime;
21     }
22 
23     public void setBeginTime(long beginTime) {
24         this.beginTime = beginTime;
25     }
26 
27     public boolean isForever() {
28         return isForever;
29     }
30 
31     public void setForever(boolean isForever) {
32         this.isForever = isForever;
33     }
34 
35     public int getDurableTime() {
36         return durableTime;
37     }
38 
39     public void setDurableTime(int durableTime) {
40         this.durableTime = durableTime;
41     }
42 
43 }

最后贴上操作缓存的工具类,简单写了几个用到的,如果没有可自行添加:

 1 package com.wbproject.util.cache;
 2 
 3 import java.util.Date;
 4 
 5 /**
 6  * 操作缓存的工具类
 7  *
 8  * @author wangbo
 9  * @date 2018-03-07 13:01:54
10  */
11 public class CacheUtil {
12 
13     /**
14      * 添加缓存
15      * 
16      * @param key
17      * @param value
18      */
19     public static boolean addCache(Object key, Object value) {
20         CacheManage cm = CacheManage.getInstance();
21         CacheConfModel cModel = new CacheConfModel();
22         cModel.setForever(true);
23         return cm.addCache(key, value, cModel);
24     }
25 
26     /**
27      * 添加临时缓存
28      * 
29      * @param key
30      * @param value
31      * @param durableTime
32      */
33     public static boolean addTempCache(Object key, Object value, int durableTime) {
34         CacheManage cm = CacheManage.getInstance();
35         CacheConfModel cModel = new CacheConfModel();
36         cModel.setBeginTime(new Date().getTime());
37         cModel.setDurableTime(durableTime);
38         cModel.setForever(false);
39         return cm.addCache(key, value, cModel);
40     }
41 
42     /**
43      * 获取缓存
44      * 
45      * @param key
46      * @return
47      */
48     public static Object getValue(Object key) {
49         CacheManage cm = CacheManage.getInstance();
50         Object ob = cm.getValue(key);
51         if (ob == null) {
52             return null;
53         }
54         return ob;
55     }
56 
57     /**
58      * 获取字符串缓存
59      * 
60      * @param key
61      * @return
62      */
63     public static String getStringValue(Object key) {
64         CacheManage cm = CacheManage.getInstance();
65         Object ob = cm.getValue(key);
66         if (ob == null) {
67             return null;
68         }
69         return ob.toString();
70     }
71 
72 }

免责声明:文章转载自《Java 使用 Map 实现缓存工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux cp强制覆盖解决办法Qt 打印机支持模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

教你七招提高.NET网站性能

一、减少往返行程(Reduce Round Trips) 使用下面的方法可以减少Web服务器和Browser之间的往返行程: 1、为Browser启用缓存 如果呈现的内容是静态的或变化周期较长,应启用Browser缓存,避免发出冗余的http请求。 2、缓冲页面输出 如果可能,则尽量缓冲页面输出,处理结束后再一次传送到客户端,这可以避免频繁传递小块...

关于HTTP协议头域详解

HTTP1.1  请求头:消息头   Accept:text/html,image/*  告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1  告诉服务器,客户机采用的编码   Accept-EnCoding:gzip,compress 告诉服务器,客户机支持的数据压缩格式 Accept-Language:en   客户机...

ES6 对象的扩展

一、属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法 let a=1; let b=2; let es5={a:a,b:b}; // 等同于 let es6={a,b}; 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值 同样的,如果对象是方法,也可以简写: let es5={...

基于Redis的Spring cache 缓存介绍

Cache API及默认提供的实现 Spring提供的核心Cache接口:  package org.springframework.cache; public interface Cache { String getName(); //缓存的名字 Object getNativeCache(); //得到底层使用的缓...

前端优化网站性能的14条规则

规则1:减少HTTP请求 性能黄金法则:只有10%~20%的响应时间花在对HTML文档的请求上,剩下80%~90%时间花在HTML文档所引用的所有组件(包括图片、脚本、样式表、flash等)的HTTP请求上。 因此,减少组件的数量并由此减少HTTP请求的数量 是改善响应时间最简单的途径。 图片地图将多个URL链接使用map方法关联到同一个图片上,从而...

ArcGIS切片技巧及注意事项三之高级工具应用

1 - 修改已经发布缓存服务的缓存级别 如上图所示,红箱子里有很多缓存管理的工具,这里我们要用的是里面的管理地图服务器缓存比例。 下图中,服务器输入本机,然后选择我们需要调整比例尺级别的服务,这个工具适用于我们的缓存已经发布,例如我们已经发布到500比例尺,现在我们想将缓存发布到200比例尺,这里我们追加一个200比例尺,然后在到我们服务缓存发布界面单独...