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;
}
}
分享到:
相关推荐
参考链接提供的CSDN博客文章《[Spring简单缓存实现](http://blog.csdn.net/maoyeqiu/article/details/50238035)》中,作者详细介绍了如何在Spring项目中实现缓存,包括配置、注解使用以及注意事项,是一个很好的学习...
Exoplayer可以通过创建CacheDataSourceFactory然后引用SimpleCache来创建实例,从而实现缓存效果。
本文将深入探讨使用PHP实现的简单缓存类,并基于标题、描述及提供的压缩包文件名来详细解释相关知识点。 首先,我们要了解什么是缓存。缓存是一种存储系统,用于临时存储频繁访问的数据,以便后续请求可以快速获取...
总的来说,通过使用WinForm中的简单缓存类,我们可以优化数据访问,提高应用程序性能,同时减少对数据库的压力。不过,要根据实际场景选择合适的缓存策略,确保缓存能带来真正的性能提升,而不是成为新的瓶颈。
【简单缓存Cache介绍】 在IT领域,尤其是在Web应用程序开发中,缓存是提升系统性能的关键技术之一。本文主要探讨的是ASP.NET中的简单缓存机制,即Cache,它可以帮助我们减少对数据库的频繁访问,提高应用程序响应...
**PSR-16简单缓存标准** PSR-16是PHP的“简单缓存”规范,由PHP框架和工具包社区共同制定,旨在提供一个统一的接口,以便于不同缓存实现之间的互操作性。它定义了基本的缓存操作,如`get()`, `set()`, `delete()`, ...
标题中的"Python-一个采用Python开发的简单缓存服务器"揭示了我们将探讨如何使用Python构建这样一个系统。 缓存服务器是提高应用性能的关键技术之一,它通过存储常用数据或计算结果,减少对原始数据源(如数据库或...
“基于模版方法的简单缓存功能”这一标题暗示了我们将讨论一个设计模式的应用,即模板方法模式,以及它如何被用来实现一个缓存系统。缓存是一种提升应用程序性能的技术,通过存储频繁访问的数据,减少对原始数据源的...
在本篇【Spring AOP+ehCache简单缓存系统解决方案】中,我们将探讨如何利用Spring AOP(面向切面编程)和ehCache框架来构建一个高效、简单的缓存系统,以提升应用程序的性能。ehCache是一款流行的开源Java缓存库,它...
适用于 Android 和 Java 的简单缓存简单缓存ASimpleCache 是一个为android制定的轻量级开源缓存框架。轻量到只有一个java文件(由十几个类专业提供)。1、它可以存储什么东西?普通的字符串、JsonObject、JsonArray...
node-cached, 一个 node.js的简单缓存库,由播放缓存API激发 缓存一个简单的缓存库,灵感来自播放缓存 API,并偏向于显示陈旧数据而不是 dog 。 接口只公开非常有限的功能,不存在缓存数据的多重获取或者删除。 虽然...
3. **Android简单缓存实现** - **LruCache**: Android SDK提供的一种基于最近最少使用原则(LRU)的内存缓存实现。当内存空间不足时,会自动移除最近最少使用的数据。 - **DiskLruCache**: 一种磁盘缓存实现,同样...
本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java应用的运行效率。 首先,让我们了解Spring AOP。Spring AOP是Spring框架的一部分,它允许我们在不修改业务代码的情况下,通过定义...
总的来说,Java Map提供了一种简单而有效的方式实现缓存技术。开发者可以根据具体需求选择合适的Map实现,并结合各种策略来管理和维护缓存,以提升系统的响应速度和效率。在实际应用中,还可以考虑使用第三方库如...
《用Golang构建简单缓存代理:go-proxy深入解析》 在现代的网络环境中,代理服务器扮演着重要的角色,它们可以提高数据访问速度,保护网络安全,以及实现多种网络策略。而Go(Golang)作为一门高效、简洁的编程语言...
总的来说,Python的缓存系统设计涵盖了从简单函数缓存到复杂的分布式缓存解决方案。选择合适的缓存策略和工具取决于具体的应用场景和需求,比如数据量、性能要求、资源限制等。理解并熟练运用缓存,可以显著提升程序...
以下是一个简单的使用示例: ```swift import Cacher let cacher = Cacher() let key = "myDataKey" let data = try? Data(contentsOf: URL(string: "https://example.com/image.jpg")!) cacher.set(data: data, ...
Spring AOP 和 EhCache 结合使用提供了一个简单而有效的缓存解决方案,主要目的是优化系统性能,减少对数据库的频繁访问。下面将详细解释这个解决方案的关键组成部分。 首先,EhCache 是一个广泛使用的开源 Java ...
本文将深入探讨基于标题“缓存工具CacheDemo”所描述的简单缓存框架,并结合源码分析其工作原理和实现细节。 一、缓存概念与作用 缓存是一种存储技术,用于临时存放频繁访问的数据,以便快速响应后续请求。通过减少...