- 浏览: 3369 次
最新评论
转载一篇java实现缓存的文章
1、管理缓存的类
2、缓存DTO
3、测试代码
1、管理缓存的类
package lhm.hcy.guge.frameset.cache; import java.util.*; /** * <p>Title: </p> * * <p>Description: 管理缓存</p> * Deep blue 2008-11-28 think * 可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间 * <p>Copyright: Copyright (c) 2008</p> * * <p>Company: </p> * * @author Deepblue 2008-11-11 * @version 1.0 */ public class CacheManager { private static HashMap cacheMap = new HashMap(); //单实例构造方法 private CacheManager() { super(); } //获取布尔值的缓存 public static boolean getSimpleFlag(String key){ try{ return (Boolean) cacheMap.get(key); }catch(NullPointerException e){ return false; } } public static long getServerStartdt(String key){ try { return (Long)cacheMap.get(key); } catch (Exception ex) { return 0; } } //设置布尔值的缓存 public synchronized static boolean setSimpleFlag(String key,boolean flag){ if (flag && getSimpleFlag(key)) {//假如为真不允许被覆盖 return false; }else{ cacheMap.put(key, flag); return true; } } public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){ if (cacheMap.get(key) == null) { cacheMap.put(key,serverbegrundt); return true; }else{ return false; } } //得到缓存。同步静态方法 private synchronized static Cache getCache(String key) { return (Cache) cacheMap.get(key); } //判断是否存在一个缓存 private synchronized static boolean hasCache(String key) { return cacheMap.containsKey(key); } //清除所有缓存 public synchronized static void clearAll() { cacheMap.clear(); } //清除某一类特定缓存,通过遍历HASHMAP下的所有对象,来判断它的KEY与传入的TYPE是否匹配 public synchronized static void clearAll(String type) { Iterator i = cacheMap.entrySet().iterator(); String key; ArrayList<String> arr = new ArrayList<String>(); try { while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); key = (String) entry.getKey(); if (key.startsWith(type)) { //如果匹配则删除掉 arr.add(key); } } for (int k = 0; k < arr.size(); k++) { clearOnly(arr.get(k)); } } catch (Exception ex) { ex.printStackTrace(); } } //清除指定的缓存 public synchronized static void clearOnly(String key) { cacheMap.remove(key); } //载入缓存 public synchronized static void putCache(String key, Cache obj) { cacheMap.put(key, obj); } //获取缓存信息 public static Cache getCacheInfo(String key) { if (hasCache(key)) { Cache cache = getCache(key); if (cacheExpired(cache)) { //调用判断是否终止方法 cache.setExpired(true); } return cache; }else return null; } //载入缓存信息 public static void putCacheInfo(String key, Cache obj, long dt,boolean expired) { Cache cache = new Cache(); cache.setKey(key); cache.setTimeOut(dt + System.currentTimeMillis()); //设置多久后更新缓存 cache.setValue(obj); cache.setExpired(expired); //缓存默认载入时,终止状态为FALSE cacheMap.put(key, cache); } //重写载入缓存信息方法 public static void putCacheInfo(String key,Cache obj,long dt){ Cache cache = new Cache(); cache.setKey(key); cache.setTimeOut(dt+System.currentTimeMillis()); cache.setValue(obj); cache.setExpired(false); cacheMap.put(key,cache); } //判断缓存是否终止 public static boolean cacheExpired(Cache cache) { if (null == cache) { //传入的缓存不存在 return false; } long nowDt = System.currentTimeMillis(); //系统当前的毫秒数 long cacheDt = cache.getTimeOut(); //缓存内的过期毫秒数 if (cacheDt <= 0||cacheDt>nowDt) { //过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE return false; } else { //大于过期时间 即过期 return true; } } //获取缓存中的大小 public static int getCacheSize() { return cacheMap.size(); } //获取指定的类型的大小 public static int getCacheSize(String type) { int k = 0; Iterator i = cacheMap.entrySet().iterator(); String key; try { while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); key = (String) entry.getKey(); if (key.indexOf(type) != -1) { //如果匹配则删除掉 k++; } } } catch (Exception ex) { ex.printStackTrace(); } return k; } //获取缓存对象中的所有键值名称 public static ArrayList<String> getCacheAllkey() { ArrayList a = new ArrayList(); try { Iterator i = cacheMap.entrySet().iterator(); while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); a.add((String) entry.getKey()); } } catch (Exception ex) {} finally { return a; } } //获取缓存对象中指定类型 的键值名称 public static ArrayList<String> getCacheListkey(String type) { ArrayList a = new ArrayList(); String key; try { Iterator i = cacheMap.entrySet().iterator(); while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); key = (String) entry.getKey(); if (key.indexOf(type) != -1) { a.add(key); } } } catch (Exception ex) {} finally { return a; } } }
2、缓存DTO
package lhm.hcy.guge.frameset.cache; /** * <p>Title: </p> * * <p>Description: 缓存DTO</p> * * <p>Copyright: Copyright (c) 2008</p> * * <p>Company: </p> * * @author Deepblue 2008-11-11 * @version 1.0 */ public class Cache { private String key;//缓存ID private Object value;//缓存数据 private long timeOut;//更新时间 private boolean expired; //是否终止 public Cache() { super(); } public Cache(String key, Object value, long timeOut, boolean expired) { this.key = key; this.value = value; this.timeOut = timeOut; this.expired = expired; } public String getKey() { return key; } public long getTimeOut() { return timeOut; } public Object getValue() { return value; } public void setKey(String string) { key = string; } public void setTimeOut(long l) { timeOut = l; } public void setValue(Object object) { value = object; } public boolean isExpired() { return expired; } public void setExpired(boolean b) { expired = b; } }
3、测试代码
class Test { public static void main(String[] args) { System.out.println(CacheManager.getSimpleFlag("alksd")); // CacheManager.putCache("abc", new Cache()); // CacheManager.putCache("def", new Cache()); // CacheManager.putCache("ccc", new Cache()); // CacheManager.clearOnly(""); // Cache c = new Cache(); // for (int i = 0; i < 10; i++) { // CacheManager.putCache("" + i, c); // } // CacheManager.putCache("aaaaaaaa", c); // CacheManager.putCache("abchcy;alskd", c); // CacheManager.putCache("cccccccc", c); // CacheManager.putCache("abcoqiwhcy", c); // System.out.println("删除前的大小:"+CacheManager.getCacheSize()); // CacheManager.getCacheAllkey(); // CacheManager.clearAll("aaaa"); // System.out.println("删除后的大小:"+CacheManager.getCacheSize()); // CacheManager.getCacheAllkey(); } }
相关推荐
在提供的"Java实现HTTP文件下载_(转载).txt"文件中,可能包含了具体的示例代码或进一步的解释。通过阅读和理解这份文档,开发者可以更好地掌握Java文件下载的实现技巧。在实际应用中,可以根据项目需求进行相应的...
**标题:“Hibernate缓存机制,转载”** **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:*...
JAXB允许我们将Java类与XML Schema定义的元素和类型绑定,从而实现XML的序列化和反序列化。 在Java对象和XML之间的转换过程中,JAXB主要涉及到以下几个关键概念: 1. **Java类与XML Schema绑定**: JAXB使用`@...
9. 设计模式:总结Java中常用的23种设计模式的定义、使用场景和实现方式。 10. Spring/SpringMVC:介绍Spring框架的核心特性,包括IoC容器、AOP、事务管理、Spring MVC框架等。 11. SpringBoot/SpringCloud:...
Ehcache 是一个开源的 Java 缓存库,它提供了本地内存缓存以及分布式缓存解决方案。在 Spring 框架中,Ehcache 可以被轻松地集成,以提升应用的性能,减少数据库的负载。这篇博客将深入探讨如何将 Ehcache 集成到 ...
在“自动刷新页面的实现方法总结.txt”文件中,可能包含了更多关于如何自动刷新页面的源码示例和实践技巧,如使用定时器(setTimeout或setInterval)实现的JavaScript自动刷新,或者结合框架(如React、Vue等)实现...
1. **对象关系映射(ORM)**: ORM是将数据库中的表映射为Java对象的技术,Hibernate通过XML或注解方式实现这种映射,使得开发者可以使用面向对象的方式来处理数据。 2. **配置文件**: Hibernate的配置文件...
5. **数据一致性**:可能会涉及到分布式数据库和缓存,如Java的JTA(Java Transaction API)和JMS(Java Message Service)在保持数据一致性的角色。 6. **安全性**:在集群环境中,如何管理和维护安全策略,防止未...
7. **性能优化**:如缓存策略(如Redis)、负载均衡、CDN服务等,以应对高并发访问。 开源的JSP论坛源码为初学者和经验丰富的开发者提供了一个实践平台,他们可以通过实际操作,深入学习和掌握上述知识点。同时,...
【WebService+Android】是将Web服务技术应用到Android平台上的一个重要实践,主要目的是为了实现远程数据交换和交互。Web服务,通常基于SOAP(Simple Object Access Protocol)或REST(Representational State ...
在构建Web应用架构时,开源产品提供了丰富的选择和强大的功能,可以帮助开发者以较低的成本实现高效、灵活和可扩展的解决方案。这篇博客文章“使用开源产品组装你的Web应用架构”(来源于...
Memcached 是一个高性能、分布式的内存对象缓存系统,它允许应用程序存储和检索数据,以减少数据库负载。在 Tomcat 中,我们可以利用 Memcached Session Manager (MSM) 这一工具来实现这一目标。该工具有多种序列化...
Nginx的反向代理 ...tomcat+nginx+redis实现均衡负载、session共享(二)...好在redis提供了java客户端开发包,名曰jedis,下星期会比较忙,等过段时间再分享下使用jedis缓存数据的过程。 欢迎转载,但请先经过本人允许。
【描述】"j2ee在线购物网实例源码,转载供大家共同学习"表明这是一个共享的学习资源,旨在促进开发者之间的知识交流和技能提升。通过分析和研究这个源码,开发者可以深入理解如何在实际项目中运用J2EE技术栈,包括...
- PHP/Python/Java:常见的后端编程语言,用于处理HTTP请求,实现业务逻辑。 3. **框架选择**: 常用的BBS论坛开发框架有Discuz!、PHPWind等,它们提供了一套完整的论坛系统模板,简化了开发过程。另外,对于自建...