`
z_gxjs
  • 浏览: 7206 次
  • 性别: 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缓存数据

    NULL 博文链接:https://tangzhifei.iteye.com/blog/945428

    分页缓存

    分页缓存&lt;用java实现分页,并读取过程先读取缓存数据&gt;

    Java缓存框架Java缓存框架

    EhCache EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 主要的特性有: 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量...

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

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

    java 创建字符串缓存类

    java 创建字符串缓存类 java 创建字符串缓存类

    java 缓存数据索引文件

    Query the data from table (database)with the tremendous volume or from the file system, the efficiency may be very slow. While using QuickMemoryFile, regard data table or file system as the data ...

    java Map实现的cache manager,定时清除缓存里面的值

    java Map实现的cache manager,定时清除缓存里面的值,使数据一致保持最新

    java缓存工具SimpleCache.zip

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点   来自 杭州斯凯网络科技有限公司 ...

    统计缓存(java对象所占的内存)大小

    统计缓存大小(查看java对象所占的内存大小).

    Java缓存框架 Ehcache.zip

    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 下图是 Ehcache 在应用程序中的位置: 主要的特性有: 1. 快速.2. 简单.3. 多种缓存策略4. 缓存数据有两级:...

    cache设置缓存数据,可直接运行

    Java设置缓存数据

    java之数据库缓存

    NULL 博文链接:https://mengdejun.iteye.com/blog/795829

    android数据缓存

    android数据缓存(可设置时间):普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和 byte数据。

    自己封装缓存接口数据的类

    #import typedef void(^SuccessBlock)(NSDictionary *returnDic, NSString *msg); typedef void(^FailureBlock)(NSString *errorInfo); typedef void(^LoadProgress)...//清除接口数据缓存 +(void)deleteCache; @end

    java使用hashMap缓存保存数据的方法

    主要介绍了java使用hashMap缓存保存数据的方法,结合实例形式简单分析了java基于hashmap读写缓存数据的相关操作技巧,需要的朋友可以参考下

    Java实现的树以及包含树的内存缓存框架

    随手写了一个TreeNode,顺道实现了个对应的内存缓存框架,适用于数据量不大,更新也少但是反复要读的数据,比如模块信息/组织结构/频道栏目/权限等。 PS:Java是可以直接操作内存的,只是现在的框架整合让人退化了。...

    java 缓存的简单实现

    java缓存实现demo完整实例,很不错的资源,欢迎大家来下载学习。/** * 此函数接受一个对象列表,数目不定,opration:表是触发的事件 * eg:change;fnClear:表示初始化下拉框。var_args表示多个下拉框... */ ...

    Java缓存处理大量Json数组 StringBufferCacheUtil.java

    主要用来缓存处理大量的Json数组的工具类,比如:TCP编程时,客户端或服务端(等等)接收大量Json数据时,由于受到字节数组的长度问题,不能读取一个完整的json字符串,此方法就是用StringBuffer作为缓存处理得到...

    Java 实现Redis存储复杂json格式数据并返回给前端

    主要介绍了Java 实现Redis存储复杂json格式数据并返回给前端操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics