`

JAVA缓存 - Cache类

    博客分类:
  • J2SE
 
阅读更多

JAVA缓存有两种:
一、文件缓存,是指把数据存储在磁盘上,可以XML格式,也可以序列化文件DAT格式还是其它文件格式。
二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查。

其代码如下:

JAVA缓存 - Cache类

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;
}
}
//测试类,
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缓存 - CacheManager类

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 arr = new ArrayList();
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 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 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 楼 jiangm520 2013-01-31  
coldrush 写道
垃圾得无以复加
简单的,不然哥还给你写个分布式的cache啊。
1 楼 coldrush 2013-01-24  
垃圾得无以复加

相关推荐

    alisoft-xplatform-asf-cache-2.5.1.jar

    alisoft-xplatform-asf-cache-2.5.1.jar是一个Java实现的库,它为Java开发者提供了与Memcached服务器通信的接口。这个库的特点在于其源码开放,内部注释清晰且全为中文,使得国内开发者能够更轻松地理解和使用。这...

    java 缓存 cache lru 实例

    java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例 java 缓存 cache lru 实例

    mybatis-enhanced-cache源码和jar包

    在"mybatis-enhanced-cache-0.0.1-SNAPSHOT.jar"中,包含了这个插件的实现代码和运行所需的类。开发者可以通过添加此jar包到项目类路径来使用该插件。而"mybatis-enhanced-cache-master.zip"则可能是源码包,如果你...

    jar包-spring-modules-cache.jar

    总之,`spring-modules-cache.jar`中的Spring Modules Cache是Spring框架的一个强大补充,它简化了缓存的管理和使用,帮助开发者构建高性能、易维护的Java应用。无论是在单体应用还是微服务架构中,这个库都能发挥...

    httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5的jar包下载

    **httpclient-cache-4.2.5.jar** 是HttpClient的缓存模块,它为HTTP客户端增加了缓存功能。根据HTTP缓存规范,该库可以帮助存储和检索之前获取的HTTP响应,从而减少不必要的网络请求,提高应用程序的响应速度。它...

    spring-cache.xsd+spring-encache.xsd

    而"spring-encache.xsd"可能是Spring与Ehcache集成的一个特定Schema,Ehcache是一个流行的Java缓存解决方案,常被Spring用来实现本地缓存。 描述中提到的"springmodules-ehcache.xsd"和"springmodules-cache.xsd...

    layering-cache:为监控而生的分布式多级缓存框架

    layering-cache简介layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似。使用Caffeine作为一级本地缓存,使用redis作为二级集中式缓存。一级缓存和二级缓存的数据一致性是通过推和拉两...

    spring-boot-cache.rar

    3. **缓存配置**:在 Spring Boot 中,你还可以通过 `@Configuration` 类来自定义缓存配置,包括自定义缓存管理器、缓存配置和事件监听器。 ```java @Configuration @EnableCaching public class CacheConfig { @...

    Guava-Cache本地缓存案例代码

    在`guava-cache-demo`项目中,你可以找到以上各种功能的具体实现,通过运行这些示例代码,可以更深入地理解Guava Cache的用法。这个案例是学习和理解Guava Cache操作的一个良好起点,可以帮助开发者在实际项目中有效...

    开源项目-go-cache-cache.zip

    开源项目-go-cache-cache.zip是一个基于Go语言的内存缓存库,名为`go-cache`。这个库主要用于在应用程序中实现高效、轻量级的内存数据存储,以提高性能和响应速度。Go-cache的设计灵感可能来自于其他编程语言中的...

    react-native-http-cache2:RN http 缓存管理 原 repo 为 react-native-http-cache 由于不在维护, 对新版本 RN 不在支持, 故新建一个

    对fetch / XMLHttpRequest和ImageView进行本机http缓存控制 的iOS 安卓安装$ npm install react-native-http-cache2 --saveiOS:在您的XCode项目中进行链接从node_modules/react-native-http-cache2/ios文件夹中链接...

    JAVA缓存入门文档..Cache

    ### JAVA缓存入门文档:EHCache #### 一、EHCache简介 EHCache 是一个纯 Java 缓存实现,主要用于提高应用程序性能。它通过在内存中缓存数据来减少对数据库或其他外部系统的调用次数,从而加快应用响应速度。...

    cache2k, 轻量级,高性能的Java缓存.zip

    cache2k, 轻量级,高性能的Java缓存 cache2k缓存cache2k是内存高性能的Java缓存库。 Cache,String&gt; cache = new Cache2kBuilder, String&gt;

    autoload-cache-spring-boot-starter:自动加载缓存spring boot starter

    `autoload-cache-spring-boot-starter` 是一个针对Java开发的Spring Boot项目的启动器,它专门设计用于自动加载和管理缓存。Spring Boot以其简洁的配置和开箱即用的特性深受开发者喜爱,而这个starter旨在进一步简化...

    springmodules-cache与springmodules-ehcache的xsd.rar

    其次,`springmodules-ehcache.xsd`则是专门为集成Ehcache(一个流行的Java缓存系统)而设计的XML Schema文件。Ehcache提供了内存和磁盘存储,支持多级缓存,具有高性能和易用性。通过引入这个xsd文件,开发者可以更...

    J2Cache 基于内存和 Redis 的两级 Java 缓存框架

    J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2...

    spring-cache(通过key值更新缓存)

    Spring Cache是一个抽象层,它允许开发者在不关注具体缓存实现的情况下,轻松地在应用程序中添加缓存功能。本篇文章将详细探讨如何通过key值更新Spring Cache中的指定缓存,以及相关的缓存管理策略。 首先,让我们...

    开源项目-goburrow-cache.zip

    在`cache-master`目录下,你将找到源代码、示例、测试用例以及可能的文档。通过阅读这些内容,你可以深入理解goburrow-cache的工作原理,并学习如何在自己的项目中使用它。此外,了解源代码还可以帮助你根据实际需求...

    react-native-clear-app-cache:清理app缓存 React-Native模块封装 支持iOSAndroid

    README Author  E-mail ...支持 iOS Android 清理app缓存 安装使用 npm install --save react-native-clear-app-cache Then link with: react-native link react-native-clear-app-cache 运行示例

Global site tag (gtag.js) - Google Analytics