`
z_gxjs
  • 浏览: 7319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 数据缓存

阅读更多

/**
 * 第一步 缓存 对象
 */

package org.nms.cache;

/**
 * @ClassName: DataCacheEntity
 * @Description: TODO( DataCacheEntity 缓存对象)
 * @author z_gxjs_zhangyc
 * @date Jul 17, 2012 3:14:14 PM
 * @version 1.0
 */
public class CacheEntity {
  private String key;//缓存ID   
     private Object value;//缓存数据   
     private long timeOut;//更新时间   
     private boolean expired; //是否终止   
     public CacheEntity() {   
             super();   
     }   

     public CacheEntity(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;   
     }  
}

 

/**
 * 第二步 管理缓存
 */

package org.nms.cache;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

/**
 * @ClassName: CacheManager
 * @Description: TODO( CacheManager 管理缓存)
 * 可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间
 * @author z_gxjs_zhangyc
 * @date Jul 17, 2012 3:15:49 PM
 * @version 1.0
 */
@SuppressWarnings("unchecked")
public class CacheManager {
 

 public 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 CacheEntity getCache(String key) {   
        return (CacheEntity) 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<CacheEntity> 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, CacheEntity obj) {   
        cacheMap.put(key, obj);   
    }   
  
    //获取缓存信息   
    public static CacheEntity getCacheInfo(String key) {   
  
        if (hasCache(key)) {   
         CacheEntity cache = getCache(key);   
            if (cacheExpired(cache)) { //调用判断是否终止方法   
                cache.setExpired(true);   
            }   
            return cache;   
        }else  
            return null;   
    }   
  
    //载入缓存信息   
    public static void putCacheInfo(String key, CacheEntity obj, long dt,boolean expired) {   
     CacheEntity cache = new CacheEntity();   
        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,CacheEntity obj,long dt){   
     CacheEntity cache = new CacheEntity();   
        cache.setKey(key);   
        cache.setTimeOut(dt+System.currentTimeMillis());   
        cache.setValue(obj);   
        cache.setExpired(false);   
        cacheMap.put(key,cache);   
    }   
  
    //判断缓存是否终止   
    public static boolean cacheExpired(CacheEntity 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;   
    }   
  
    //获取缓存对象中的所有键值名称   
    @SuppressWarnings("finally")
 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;
        }   
    }   
  
    //获取缓存对象中指定类型 的键值名称   
    @SuppressWarnings("finally")
 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;   
        }   
    } 
}

 

/**
 *  第三步 测试
 */

package org.nms.cache;

import java.util.Iterator;
import java.util.Map.Entry;

/**
 * @ClassName: CacheTest
 * @Description: TODO( CacheTest 测试类)
 * @author z_gxjs_zhangyc
 * @date Jul 18, 2012 10:27:32 AM
 * @version 1.0
 */
public class CacheTest {

 @SuppressWarnings("unchecked")
 public static void main(String[] args) { 
  
  System.out.println(CacheManager.getSimpleFlag("test"));  
  
        CacheManager.putCache("abc", new CacheEntity());   
        CacheManager.putCache("def", new CacheEntity());   
        CacheManager.putCache("ccc", new CacheEntity());   
        CacheManager.clearOnly(""); 
       
        CacheEntity c = new CacheEntity();
        for (int i = 0; i < 10; i++) {  
         CacheManager.putCache("" + i, c);
         c.setValue("zhangyc 做的测试数据");
         c.setTimeOut(12);
        }
       
        CacheManager.putCache("zhangyc", c);   
        CacheManager.putCache("test;alskd", c);   
        CacheManager.putCache("testasdfasdfasd", c);   
        CacheManager.putCache("abcoqiwhcy", c);   
        System.out.println("删除前的大小:"+CacheManager.getCacheSize());   
        CacheManager.getCacheAllkey();   
        CacheManager.clearAll("test");   
        System.out.println("删除后的大小:"+CacheManager.getCacheSize());   
        CacheManager.getCacheAllkey();   

        Iterator<CacheEntity> it = CacheManager.cacheMap.entrySet().iterator();   
        try {   
            while (it.hasNext()) {   
                Entry entry = (Entry) it.next();   
                String key = (String) entry.getKey();
                CacheEntity ce= CacheManager.getCacheInfo(key);
                System.out.println("对象"+key+":"+ce.getValue());
            }   
        } catch (Exception ex) {   
            ex.printStackTrace();   
        }   
 }
}

分享到:
评论

相关推荐

    java缓存数据

    本文将深入探讨“java缓存数据”这一主题,结合提供的标签“源码”和“工具”,我们将从源代码层面和常用工具角度来解析Java缓存的相关知识。 首先,Java缓存数据的基本原理是将频繁访问的数据存储在内存中,避免...

    分页缓存

    本篇文章将深入探讨如何使用Java来实现分页缓存,并介绍在读取过程中如何优先从缓存获取数据。 首先,理解分页的基本概念是必要的。在Web应用中,当用户浏览大量数据时,通常会采用分页的方式来显示,而不是一次性...

    java map 实现缓存技术

    在Java编程中,Map接口是数据结构中非常重要的一个部分,它提供了键值对的存储方式,便于快速访问和操作数据。在许多实际应用中,尤其是高性能和高并发的场景,Map常被用来实现缓存技术,以提高数据读取速度和系统...

    仿redis缓存Java版轻量级缓存组件LocalCache

    仿redis缓存Java版轻量级缓存组件LocalCache,基于JVM内存实现数据缓存及过期机制

    JAVA的缓存应用介绍

    在Java中,缓存通常用于提高数据访问速度,减少对数据库或其他慢速资源的依赖。基本缓存的使用可能涉及简单的数据结构如HashMap或ConcurrentHashMap,用于临时存储常用的数据。随着应用复杂性的增加,开发者可能会...

    java缓存工具 SimpleCache_java_缓存_

    Java 缓存工具 SimpleCache 是一个用于在 Java 应用程序中实现高效数据存储和检索的框架。在高并发和大数据量的场景下,缓存是提高系统性能的关键技术之一。SimpleCache 提供了一种简洁的方式来管理短期数据,避免了...

    java之数据库缓存

    在IT行业中,数据库缓存是优化系统性能的关键技术之一,特别是在Java开发中。数据库缓存是一种将经常访问的数据存储在内存中的技术,以减少对硬盘的读取,从而提高数据的访问速度。本文将深入探讨Java与数据库缓存的...

    Java缓存技术的使用实例

    Java缓存技术是提高应用程序性能的关键工具,尤其是在处理大量数据时。它通过存储频繁访问的数据在内存中,避免了重复的数据库查询,显著提升了响应速度。在这个“Java缓存技术的使用实例”中,我们将深入探讨Java...

    JAVA缓存技术深入了解

    Java 缓存技术是优化应用程序性能的关键组成部分,尤其是在处理大量数据或者频繁访问相同资源的应用中。深入理解Java缓存技术可以帮助我们设计出更加高效、响应迅速的系统。在这个主题下,我们将探讨Java缓存的基本...

    Java系统分布式缓存PPT

    分布式缓存是现代大型Java系统中的重要组成部分,它主要用于存储经常访问的数据,以减少数据库的负担,提高系统的响应速度和整体性能。这份“Java系统分布式缓存PPT”涵盖了从基础理论到实战技巧,再到综合案例,...

    java 创建字符串缓存类

    在Java编程语言中,创建字符串缓存类是一个常见的优化策略,尤其在处理大量字符串操作时。这是因为Java中的字符串是不可变的,每次对字符串进行修改都会生成一个新的对象,这可能会导致内存消耗增加和性能下降。为了...

    java缓存类

    Java 缓存类是编程中常见的一种技术,用于提高数据读取速度,减少对数据库或远程服务的依赖。在Java中,有许多库和框架提供了缓存功能,如Ehcache、Guava Cache以及Spring框架中的Cache Abstraction。本文将重点讨论...

    android数据缓存

    "android数据缓存"主要涉及如何有效地管理和存储各种类型的数据,如字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的Java对象以及byte数据。下面将详细介绍这些知识点。 1. **数据缓存的优势** - 提升...

    Java缓存技术深入了解

    Java缓存技术是提高应用程序性能的关键技术之一,它通过存储经常访问的数据,减少了对数据库或其他慢速数据源的依赖,从而加快了数据的获取速度。本篇文章将深入探讨Java中的缓存实现,包括基础概念、常见缓存库以及...

    JAVA_WEB_缓存技术

    在Java Web开发中,缓存技术是提高应用程序性能的关键手段之一。它通过存储常用的数据或计算结果,避免了每次请求时都直接从数据库或其他慢速存储中获取数据,从而显著提升了响应速度。在这个场景中,我们看到两个...

    java缓存代码,tomcat JVM配置

    在Java中,缓存是一种常见的技术,用于存储频繁访问的数据,以减少对数据库或其他慢速资源的依赖。常用的Java缓存框架有Ehcache、Guava Cache和Spring Cache等。例如,在`java写缓存.docx`文件中,可能详细讲解了...

    java 缓存插件ehcache 应用实例

    Ehcache是一款广泛使用的开源Java缓存框架,尤其在处理大量数据时,它可以显著提升应用程序的效率。本文将深入探讨Ehcache在实际应用中的实例。 一、Ehcache简介 Ehcache是由Terracotta公司开发的高性能、易用的...

    高性能Java数据库缓存_缓存思路

    【高性能Java数据库缓存_缓存思路】 在Java开发中,数据库缓存是提升系统性能的关键技术之一。本文主要探讨如何构建高效的Java数据库缓存系统,以应对大规模流量的挑战。作者通过分享舍得网的实践经验,阐述了一套...

Global site tag (gtag.js) - Google Analytics