/**
* 第一步 缓存 对象
*/
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来实现分页缓存,并介绍在读取过程中如何优先从缓存获取数据。 首先,理解分页的基本概念是必要的。在Web应用中,当用户浏览大量数据时,通常会采用分页的方式来显示,而不是一次性...
在Java编程中,Map接口是数据结构中非常重要的一个部分,它提供了键值对的存储方式,便于快速访问和操作数据。在许多实际应用中,尤其是高性能和高并发的场景,Map常被用来实现缓存技术,以提高数据读取速度和系统...
仿redis缓存Java版轻量级缓存组件LocalCache,基于JVM内存实现数据缓存及过期机制
在Java中,缓存通常用于提高数据访问速度,减少对数据库或其他慢速资源的依赖。基本缓存的使用可能涉及简单的数据结构如HashMap或ConcurrentHashMap,用于临时存储常用的数据。随着应用复杂性的增加,开发者可能会...
Java 缓存工具 SimpleCache 是一个用于在 Java 应用程序中实现高效数据存储和检索的框架。在高并发和大数据量的场景下,缓存是提高系统性能的关键技术之一。SimpleCache 提供了一种简洁的方式来管理短期数据,避免了...
在IT行业中,数据库缓存是优化系统性能的关键技术之一,特别是在Java开发中。数据库缓存是一种将经常访问的数据存储在内存中的技术,以减少对硬盘的读取,从而提高数据的访问速度。本文将深入探讨Java与数据库缓存的...
Java缓存技术是提高应用程序性能的关键工具,尤其是在处理大量数据时。它通过存储频繁访问的数据在内存中,避免了重复的数据库查询,显著提升了响应速度。在这个“Java缓存技术的使用实例”中,我们将深入探讨Java...
Java 缓存技术是优化应用程序性能的关键组成部分,尤其是在处理大量数据或者频繁访问相同资源的应用中。深入理解Java缓存技术可以帮助我们设计出更加高效、响应迅速的系统。在这个主题下,我们将探讨Java缓存的基本...
分布式缓存是现代大型Java系统中的重要组成部分,它主要用于存储经常访问的数据,以减少数据库的负担,提高系统的响应速度和整体性能。这份“Java系统分布式缓存PPT”涵盖了从基础理论到实战技巧,再到综合案例,...
在Java编程语言中,创建字符串缓存类是一个常见的优化策略,尤其在处理大量字符串操作时。这是因为Java中的字符串是不可变的,每次对字符串进行修改都会生成一个新的对象,这可能会导致内存消耗增加和性能下降。为了...
Java 缓存类是编程中常见的一种技术,用于提高数据读取速度,减少对数据库或远程服务的依赖。在Java中,有许多库和框架提供了缓存功能,如Ehcache、Guava Cache以及Spring框架中的Cache Abstraction。本文将重点讨论...
"android数据缓存"主要涉及如何有效地管理和存储各种类型的数据,如字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的Java对象以及byte数据。下面将详细介绍这些知识点。 1. **数据缓存的优势** - 提升...
Java缓存技术是提高应用程序性能的关键技术之一,它通过存储经常访问的数据,减少了对数据库或其他慢速数据源的依赖,从而加快了数据的获取速度。本篇文章将深入探讨Java中的缓存实现,包括基础概念、常见缓存库以及...
在Java Web开发中,缓存技术是提高应用程序性能的关键手段之一。它通过存储常用的数据或计算结果,避免了每次请求时都直接从数据库或其他慢速存储中获取数据,从而显著提升了响应速度。在这个场景中,我们看到两个...
在Java中,缓存是一种常见的技术,用于存储频繁访问的数据,以减少对数据库或其他慢速资源的依赖。常用的Java缓存框架有Ehcache、Guava Cache和Spring Cache等。例如,在`java写缓存.docx`文件中,可能详细讲解了...
Ehcache是一款广泛使用的开源Java缓存框架,尤其在处理大量数据时,它可以显著提升应用程序的效率。本文将深入探讨Ehcache在实际应用中的实例。 一、Ehcache简介 Ehcache是由Terracotta公司开发的高性能、易用的...
【高性能Java数据库缓存_缓存思路】 在Java开发中,数据库缓存是提升系统性能的关键技术之一。本文主要探讨如何构建高效的Java数据库缓存系统,以应对大规模流量的挑战。作者通过分享舍得网的实践经验,阐述了一套...