package com.william.job;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class CacheMgr {
private static Map cacheMap = new HashMap();
private static Map cacheConfMap = new HashMap();
private CacheMgr() {
}
private static CacheMgr cm = null;
public static CacheMgr getInstance() {
if (cm == null) {
cm = new CacheMgr();
Thread t = new ClearCache();
t.start();
}
return cm;
}
/**
* 增加缓存
*
* @param key
* @param value
* @param ccm
* 缓存对象
* @return
*/
public boolean addCache(Object key, Object value, CacheConfModel ccm) {
boolean flag = false;
cacheMap.put(key, value);
cacheConfMap.put(key, ccm);
System.out.println("now addcache==" + cacheMap.size());
return true;
}
/**
* 重载了增加缓存方法,
* @param key
* @param value
* @param beginTime
* @param durableTime -----分钟
* @param isForever
* @return
*/
public boolean addCache(Object key, Object value, long beginTime,int durableTime,boolean isForever) {
cacheMap.put(key, value);
CacheConfModel ccm = new CacheConfModel();
ccm.setBeginTime(beginTime);
ccm.setDurableTime(durableTime);
ccm.setForever(isForever);
cacheConfMap.put(key, ccm);
System.out.println("now addcache==" + cacheMap.size());
return true;
}
/**
* 删除缓存
*
* @param key
* @return
*/
public boolean removeCache(Object key) {
cacheMap.remove(key);
cacheConfMap.remove(key);
System.out.println("now removeCache==" + cacheMap.size());
return true;
}
/**
* 获取缓存
* @param key
* @return
*/
public Object getData(Object key)
{
return cacheMap.get(key);
}
/**
* 清除缓存的类
*
* @author wanglj 继承Thread线程类
*/
private static class ClearCache extends Thread {
public void run() {
while (true) {
Set tempSet = new HashSet();
Set set = cacheConfMap.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
CacheConfModel ccm = (CacheConfModel) cacheConfMap.get(key);
// 比较是否需要清除
if (!ccm.isForever()) {
if ((new Date().getTime() - ccm.getBeginTime()) >= ccm
.getDurableTime() * 60 * 1000) {
// 可以清除,先记录下来
tempSet.add(key);
}
}
}
// 真正清除
Iterator tempIt = tempSet.iterator();
while (tempIt.hasNext()) {
Object key = tempIt.next();
cacheMap.remove(key);
cacheConfMap.remove(key);
}
System.out.println("now thread================>"
+ cacheMap.size());
// 休息
try {
Thread.sleep(60 * 1000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package com.william.job;
public class CacheConfModel implements java.io.Serializable {
private long beginTime;
private boolean isForever = false;
private int durableTime;
public long getBeginTime() {
return beginTime;
}
public void setBeginTime(long beginTime) {
this.beginTime = beginTime;
}
public boolean isForever() {
return isForever;
}
public void setForever(boolean isForever) {
this.isForever = isForever;
}
public int getDurableTime() {
return durableTime;
}
public void setDurableTime(int durableTime) {
this.durableTime = durableTime;
}
}
分享到:
相关推荐
简单缓存Cache介绍 asp.net 缓存 cache
分享一个PHP实现的简单缓存类,析构函数,检查缓存目录是否有效,默认赋值,检查缓存是否有效,写入缓存,加载缓存,清除缓存。
PSR-16 简单缓存的Doctrine缓存适配器
主要介绍了winform简单缓存类,涉及C#缓存使用技巧,非常简单实用,需要的朋友可以参考下
一个采用Python开发的简单缓存服务器
node-cached, 一个 node.js的简单缓存库,由播放缓存API激发 缓存一个简单的缓存库,灵感来自播放缓存 API,并偏向于显示陈旧数据而不是 dog 。 接口只公开非常有限的功能,不存在缓存数据的多重获取或者删除。 虽然...
Cacher 适用于iOS,macOS,tvOS和watchOS的超简单缓存解决方案
利用spring实现的简单的缓存的例子,代码解释:http://blog.csdn.net/maoyeqiu/article/details/50238035
Exoplayer可以通过创建CacheDataSourceFactory然后引用SimpleCache来创建实例,从而实现缓存效果。
Volley。fastJson解析网络Json ,多线程显示图片,简单缓存图片,万能适配器,完美解决图片排序混乱问题,完美解决图片多次加载问题
代理 用golang编写的简单缓存代理
java map 缓存 //毫秒计算 this.timeOut = timeOut*1000;
NULL 博文链接:https://wnick.iteye.com/blog/1464649
随着网络存储等新技术的出现,存储的层次越来越复杂,原有的简单缓存管理技术已经不合适 日趋复杂的应用。频率和时间综合考虑的缓存替换方法、多级 缓存的替换技术成为研究的热点。本文综述了缓存替换算法的研究现状...
需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系统中Service或则DAO层的get/find等方法返回结果,如果数据更新(使用Create/update/delete方法...
NULL 博文链接:https://honda418.iteye.com/blog/354945
python
本文实例讲述了PHP实现的简单缓存类。分享给大家供大家参考。具体如下: cache.inc.php: <?php class Cache { /** * $dir : 缓存文件存放目录 * $lifetime : 缓存文件有效期,单位为秒 * $cacheid : 缓存...
Python使用技巧,实战应用开发小系统参考资料,源码参考。经测试可运行。 详细介绍了一些Python框架的各种功能和模块,以及如何使用Python进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者...