`
lh249837348
  • 浏览: 3369 次
社区版块
存档分类
最新评论

java实现缓存(转载)

    博客分类:
  • java
 
阅读更多
转载一篇java实现缓存的文章
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实现文件下载

    在提供的"Java实现HTTP文件下载_(转载).txt"文件中,可能包含了具体的示例代码或进一步的解释。通过阅读和理解这份文档,开发者可以更好地掌握Java文件下载的实现技巧。在实际应用中,可以根据项目需求进行相应的...

    Hibernate缓存机制,转载

    **标题:“Hibernate缓存机制,转载”** **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:*...

    [转载] JAXB中Java对象和XML之间的转换

    JAXB允许我们将Java类与XML Schema定义的元素和类型绑定,从而实现XML的序列化和反序列化。 在Java对象和XML之间的转换过程中,JAXB主要涉及到以下几个关键概念: 1. **Java类与XML Schema绑定**: JAXB使用`@...

    Java 最常见 200+ 面试题全解析:面试必备.pdf

    9. 设计模式:总结Java中常用的23种设计模式的定义、使用场景和实现方式。 10. Spring/SpringMVC:介绍Spring框架的核心特性,包括IoC容器、AOP、事务管理、Spring MVC框架等。 11. SpringBoot/SpringCloud:...

    Ehcache集成Spring的使用(转载)

    Ehcache 是一个开源的 Java 缓存库,它提供了本地内存缓存以及分布式缓存解决方案。在 Spring 框架中,Ehcache 可以被轻松地集成,以提升应用的性能,减少数据库的负载。这篇博客将深入探讨如何将 Ehcache 集成到 ...

    页面刷新方法汇总(转载)

    在“自动刷新页面的实现方法总结.txt”文件中,可能包含了更多关于如何自动刷新页面的源码示例和实践技巧,如使用定时器(setTimeout或setInterval)实现的JavaScript自动刷新,或者结合框架(如React、Vue等)实现...

    hibernate官方入门教程 (转载)

    1. **对象关系映射(ORM)**: ORM是将数据库中的表映射为Java对象的技术,Hibernate通过XML或注解方式实现这种映射,使得开发者可以使用面向对象的方式来处理数据。 2. **配置文件**: Hibernate的配置文件...

    [转载] Clustering经典范文学习

    5. **数据一致性**:可能会涉及到分布式数据库和缓存,如Java的JTA(Java Transaction API)和JMS(Java Message Service)在保持数据一致性的角色。 6. **安全性**:在集群环境中,如何管理和维护安全策略,防止未...

    jsp论坛—别的网站转载的

    7. **性能优化**:如缓存策略(如Redis)、负载均衡、CDN服务等,以应对高并发访问。 开源的JSP论坛源码为初学者和经验丰富的开发者提供了一个实践平台,他们可以通过实际操作,深入学习和掌握上述知识点。同时,...

    WebService+Android

    【WebService+Android】是将Web服务技术应用到Android平台上的一个重要实践,主要目的是为了实现远程数据交换和交互。Web服务,通常基于SOAP(Simple Object Access Protocol)或REST(Representational State ...

    使用open source产品组装你的web应用架构(转载)

    在构建Web应用架构时,开源产品提供了丰富的选择和强大的功能,可以帮助开发者以较低的成本实现高效、灵活和可扩展的解决方案。这篇博客文章“使用开源产品组装你的Web应用架构”(来源于...

    tomcat使用memcached集群session共享(转载并修改)

    Memcached 是一个高性能、分布式的内存对象缓存系统,它允许应用程序存储和检索数据,以减少数据库负载。在 Tomcat 中,我们可以利用 Memcached Session Manager (MSM) 这一工具来实现这一目标。该工具有多种序列化...

    Nginx安装包

    Nginx的反向代理 ...tomcat+nginx+redis实现均衡负载、session共享(二)...好在redis提供了java客户端开发包,名曰jedis,下星期会比较忙,等过段时间再分享下使用jedis缓存数据的过程。 欢迎转载,但请先经过本人允许。

    j2ee在线购物网实例源码

    【描述】"j2ee在线购物网实例源码,转载供大家共同学习"表明这是一个共享的学习资源,旨在促进开发者之间的知识交流和技能提升。通过分析和研究这个源码,开发者可以深入理解如何在实际项目中运用J2EE技术栈,包括...

    BBS论坛开发全套资料

    - PHP/Python/Java:常见的后端编程语言,用于处理HTTP请求,实现业务逻辑。 3. **框架选择**: 常用的BBS论坛开发框架有Discuz!、PHPWind等,它们提供了一套完整的论坛系统模板,简化了开发过程。另外,对于自建...

Global site tag (gtag.js) - Google Analytics