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

java中实现简单cache

    博客分类:
  • java
阅读更多

 

 

 

创建一个静态Hashtable用于保存key和value,对于cache过期后的方法回调,在cache过期后,再访问cache的时候进行,避免了使用定时器轮询过期时间,进行cache清除的效率损耗。
使用synchronized关键字进行多线程同步。
包括二个类和一个接口:
cache类:里面都是静态方法,提供基于key,value的方法进行cache的添加,修改,访问,进行cache过期后调用callback方法。

cacheitem类:用于管理每个条目的cache内容和超时时间回调方法

ICacheMethod接口:cache到期回调方法需要实现的接口

cache类:里面都是静态方法
package org.netjframework.cache;

import java.util.Date;

public class Cache {

private static java.util.Hashtable<String,Object> __cacheList = new java.util.Hashtable<String,Object>();

public Cache() {

}
        //添加cache,不过期
public synchronized static void add(String key, Object value) {
Cache.add(key, value, -1);
}
        //添加cache有过期时间
public synchronized static void add(String key, Object value, long timeOut) {
Cache.add(key, value, timeOut, null);
}
//添加cache有过期时间并且具有回调方法
public synchronized static void add(String key, Object value, long timeOut,ICacheMethod callback) {
if (timeOut > 0) {
timeOut += new Date().getTime();
}
CacheItem item = new CacheItem(key, value, timeOut,callback);
Cache.__cacheList.put(key, item);
}
        //获取cache
public synchronized static Object get(String key) {
Object obj = Cache.__cacheList.get(key);
if (obj == null) {
return null;
}
CacheItem item = (CacheItem) obj;
boolean expired = Cache.cacheExpired(key);
if (expired == true) // 已过期
{
if(item.getCallback()==null)
{
   Cache.remove(key);
   return null;
}
else
{
ICacheMethod callback=item.getCallback();
callback.execute(key);
expired = Cache.cacheExpired(key);
if(expired==true)
{
Cache.remove(key);
return null;
}
}
}
return item.getValue();
}
        //移除cache
public synchronized static void remove(String key) {
Object obj = Cache.__cacheList.get(key);
if (obj != null) {
obj = null;
}
Cache.__cacheList.remove(key);
}
        //清理所有cache对象
public synchronized static void clear() {

for(String s:Cache.__cacheList.keySet())
{
Cache.__cacheList.put(s, null);
}
Cache.__cacheList.clear();
}

        //判断是否过期
private static boolean cacheExpired(String key) {
CacheItem item = (CacheItem) Cache.__cacheList.get(key);
if (item == null) {
return false;
}
long milisNow = new Date().getTime();
long milisExpire = item.getTimeOut();
if (milisExpire <= 0) { // 不过期
return false;
} else if (milisNow >= milisExpire) {
return true;
} else {
return false;
}
}
}

cacheitem类:用于管理每个条目的cache内容和超时时间回调方法
package org.netjframework.cache;

public class CacheItem {

private String key;
private Object value;
private long timeOut;
private ICacheMethod callback = null;

public CacheItem() {

}

public ICacheMethod getCallback() {
return callback;
}

public void setCallback(ICacheMethod callback) {
this.callback = callback;
}

public CacheItem(String key, Object value) {
this.key = key;
this.value = value;
this.timeOut = 0;
}

public CacheItem(String key, Object value, long timeOut) {
this.key = key;
this.value = value;
this.timeOut = timeOut;
}

public CacheItem(String key, Object value, long timeOut,
ICacheMethod callback) {
this.key = key;
this.value = value;
this.timeOut = timeOut;
this.callback = callback;
}

public String getKey() {
return key;
}

public void setKey(String key) {
this.key = key;
}

public Object getValue() {
return value;
}

public void setValue(Object value) {
this.value = value;
}

public long getTimeOut() {
return timeOut;
}

public void setTimeOut(long timeOut) {
this.timeOut = timeOut;
}
}

ICacheMethod接口:cache到期回调方法需要实现的接口
package org.netjframework.cache;

public interface ICacheMethod {

public void execute(String key);
}

 

 

 

 

 

分享到:
评论

相关推荐

    Cache的简单实现(java版)

    提供了Random、FIFO、LRU三种形式的Cache的简单实现

    JAVA编程之spring cache本机缓存应用

    JAVA编程之spring cache本机缓存应用 spring cache简单实用,简介: 1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和...

    Java Cache详解及简单实现

    主要介绍了 Java Cache详解及简单实现的相关资料,需要的朋友可以参考下

    etCache 是一个基于 Java 的缓存系统封装,提供统一的 API 和注解来简化缓存的使用.rar

    当前有四个实现,RedisCache、TairCache、CaffeineCache和一个简易的LinkedHashMapCache,要添加新的实现也是非常简单。它的特性: 通过统一的API访问Cache系统 通过注解实现声明式的方法缓存 通过注解创建并配置...

    java 通过文件实现缓存

    java实现缓存可以通过读取本地文件的方式实现,改代码就是通过读取本地文件实现缓存的简单例子

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    更简单的Java缓存框架 jscache.docx

    ttl 缓存存活时间(过期时间) 需要具体的缓存实现支持 如常用的redis是支持的 argCondition 前置条件过滤 针对参数过滤 满足则执行表达式逻辑 returnCondition 后置条件过滤 只有前置条件为true的情况下才能...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java开源包3

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    springCache

    简单的实现了spring cache,包括第一次存入缓存,缓存查询和缓存清空等等

    使用Java强引用和垃圾回收实现一个简单的缓存系统.txt

    这段代码实现了一个简单的缓存系统Cache,其中使用了Java的强引用和垃圾回收机制。在类的构造方法中,首先创建了一个Map对象和一个List对象分别用于存储缓存的数据和记录所有的键。然后实现了两个方法:put()和get()...

    java开源包11

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包6

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包9

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包101

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包5

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包8

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包10

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    cachesize-master.zip

    这是google开源的一个java小项目,代码有几百行,主要实现java获取CPU的Cache信息,Cache Size,Cache Line Size等。 底层使用C语言操作CPUID,获取cache,然后使用JNI技术,实现java调用C,java拿到Cache信息后,并...

Global site tag (gtag.js) - Google Analytics