创建一个静态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);
}
相关推荐
在Java环境中,我们通常通过JDBC(Java Database Connectivity)驱动来实现与Cache数据库的连接。以下是一些关键知识点: 1. **JDBC驱动**:为了在Java中连接Cache数据库,首先需要安装并配置Cache的JDBC驱动。...
Java 中常用缓存Cache机制的实现 缓存机制是指将程序或系统经常要调用的对象存在内存中,以便快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。缓存主要可分为二大类:一、通过文件...
### Java中各类Cache机制实现解决方案 #### 一、概述 在现代软件开发中,缓存技术是提升系统性能的关键手段之一。通过缓存频繁访问的数据,可以显著减少对后端数据库的压力,从而提高应用程序的响应速度和用户体验...
总结,通过Java实现缓存机制,不仅可以提升应用程序的性能,还能帮助开发者深入理解数据结构和算法,以及它们在实际问题中的应用。无论是随机、FIFO还是LRU,每种策略都有其适用场景,开发者应根据具体需求选择合适...
Java cache 实现是指在 Java 项目中使用缓存机制来存储数据,以提高应用程序的性能和效率。在这里,我们使用 Java 实现了一个简单的缓存系统,使用 HashMap 来存储缓存数据,并提供了获取、设置、删除缓存数据的方法...
在本文中,我们将深入探讨Java缓存的简单应用,并结合给出的资源——“JAVA的缓存应用.ppt”来进行讨论。 首先,让我们了解什么是缓存。缓存是计算机系统中用于临时存储数据的快速访问区域,目的是减少从主存储器或...
在Java编程中,缓存(Cache)是一种常用的技术,用于提高数据访问的速度。它通过存储最近或频繁访问的数据,使得再次请求时能快速获取,从而减少了对底层数据源的访问次数,提升了系统的性能。本实例将展示如何使用...
总的来说,Java中的缓存机制可以通过多种方式实现,包括但不限于简单的HashMap、使用并发容器、或者集成专业的缓存服务。理解这些缓存机制并选择合适的实现方式,对于优化Java应用的性能至关重要。
EHCache 是一个纯 Java 缓存实现,主要用于提高应用程序性能。它通过在内存中缓存数据来减少对数据库或其他外部系统的调用次数,从而加快应用响应速度。EHCache 可以作为一个本地缓存解决方案,也可以作为分布式缓存...
JAVA编程之spring cache本机缓存应用 spring cache简单实用,简介: 1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和...
总的来说,Java实现LRU算法的关键在于利用数据结构特性来跟踪页面的使用频率,通过淘汰最近最少使用的页面来优化内存使用。通过学习和理解LRU算法的实现,我们可以更好地理解和处理内存限制问题,提高系统的性能和...
本篇文章将详细探讨如何在Java中实现缓存,以及相关的重要知识点。 首先,理解缓存的基本原理是必要的。缓存是一种存储技术,它将频繁访问的数据或计算结果存储在快速访问的存储介质中,以便下次请求时能快速获取。...
本文将深入探讨如何使用Java实现一个基于LinkedHashMap的LRU(Least Recently Used,最近最少使用)缓存策略。 LRU缓存策略的基本思想是:当缓存满时,优先淘汰最近最少使用的数据。在Java中,LinkedHashMap类提供...
本文将深入探讨Java Cache的概念,以及如何在实际项目中实现一个简单的缓存系统。 首先,缓存的主要目标是减少对后端系统的负载,例如数据库,通过将常用数据存储在内存中,从而快速响应请求。在Java中,我们可以...
本主题将深入探讨如何基于Java客户端对Memcached进行封装,以便更高效地在Java应用中使用它。 首先,我们需要理解Java中的Memcached客户端库,如spymemcached或xmemcached。这两个库都提供了与Memcached服务器通信...
在Java编程中,Map接口是数据结构中非常重要的一个部分,它提供了键值对的存储方式,便于快速...在实际应用中,还可以考虑使用第三方库如Google的Guava Cache或Spring框架的Cache Abstraction来简化缓存的实现和管理。
### 更简单的Java缓存框架 jscache #### 知识点概述 jscache是一个轻量级、易用的Java缓存框架,它基于面向切面编程(AOP)原理实现,支持灵活配置缓存策略,并提供了多种缓存实现方式。通过使用jscache,开发者...
Java Cache System(JCS)是一种基于Java的分布式缓存系统,设计用于提高应用程序的性能和效率,通过在内存中存储经常访问的数据来减少对数据库或其他慢速资源的依赖。JCS能够有效地缓存数据对象和页面,从而减轻...
Java 实现清理DNS Cache的方法是解决网络应用中DNS解析问题的关键步骤,尤其是在开发和调试阶段,确保每次请求都能获取最新的IP地址。DNS(Domain Name System)缓存是为了提高域名解析速度而存储的,但有时可能需要...