JAVA缓存的实现

转载自  JAVA缓存的实现

缓存可分为二大类: 
一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;  
二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查. 
下面为一个简单的缓存代码 


package lhm.hcy.guge.frameset.cache;import java.util.*;/*** <p>Title: </p>** <p>Description: 管理缓存</p>* Deep blue 2008-11-28 think* 可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间* <p>Copyright: Copyright (c) 2008</p>** <p>Company: </p>** @author Deepblue  2008-11-11* @version 1.0*/
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<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, 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;}elsereturn 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); //缓存默认载入时,终止状态为FALSEcacheMap.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) { //过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSEreturn 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<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;}}//获取缓存对象中指定类型 的键值名称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 lhm.hcy.guge.frameset.cache;/*** <p>Title: </p>** <p>Description: 缓存DTO</p>** <p>Copyright: Copyright (c) 2008</p>** <p>Company: </p>** @author Deepblue  2008-11-11* @version 1.0*/
public class Cache {private String key;//缓存IDprivate 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();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

myeclipse 2016 ci3破解教程(含软件下载)

一、myeclipse简介&#xff1a; MyEclipse企业级工作平台&#xff08;MyEclipseEnterprise Workbench &#xff0c;简称MyEclipse&#xff09;是对EclipseIDE的扩 展&#xff0c;利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效 率。…

系统架构师考试6

系统架构设计师考试经验 2018年01月29日 15:23:46 大宝大宝吃饱睡好 阅读数 346 原文链接 1. 考试准备流程 考试报名地址 网站比较奇葩&#xff0c;需要IE或者360&#xff0c;chrome不行 1.1 报名 网站注册【大概9月份】填写报名信息上传照片【需要注意照片大小&#xff0c;…

计算机主机组成实验,计算机组成原理实验-运算器组成实验报告

计算机组成原理实验-运算器组成实验报告 曾国江—计算机组成原理实验报告 - 0 - 计算机组成原理课程实验报告9.3 运算器组成实验姓 名&#xff1a; 曾国江 学 号&#xff1a; 系 别&#xff1a; 计算机工程学院 班 级&#xff1a; 网络工程1班 指导老师&#xff1a; 完成时间&a…

Jsoup解析HTML实例及文档方法详解

转载自 Jsoup解析HTML实例及文档方法详解这篇文章主要介绍了Jsoup如何解析一个HTML文档、从文件加载文档、从URL加载Document等方法&#xff0c;对Jsoup常用方法做了详细讲解&#xff0c;最近提供了一个示例供大家参考 使用DOM方法来遍历一个文档 从元素抽取属性&#xff0c;文…

系统架构师考试9

系统架构师复习经验及资料共享 [复制链接] 发表于 2018-2-5 11:25 | 来自 51CTO网页 [只看他] 楼主 在入职第一天。。 人力&#xff1a;有没有证书 我&#xff1a;。。没有&#xff0c;目前都有哪些证书 人力回了一张图&#xff0c;上面大概有PMP、项目管理师、系统架构师…

java通过commons-fileupload实现多张图片的上传(servlet)

//添加食品信息private void addProduct(HttpServletRequest request, HttpServletResponse response) throws IOException{PrintWriter out response.getWriter();/*Date datenew Date();SimpleDateFormat formatnew SimpleDateFormat("yyyy-MM-dd hh:mm:ss");Stri…

javaweb项目搭建ehcache缓存系统

转载自 javaweb项目搭建ehcache缓存系统EhCache 是一个纯Java的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是Hibernate中默认的CacheProvider&#xff0c;同时在项目开发中也被广泛使用到。接下来就以用户缓存为例&#xff0c;基于javaweb项目来搭建ehcache…

微服务架构之外的选择——基于服务架构

来自ThoughtWorks的主管Neal Ford在最近的一次演讲中表达了他对企业软件系统架构转型的看法&#xff0c;他认为从单体架构转向基于服务的架构要比转向微服务架构来得容易。Ford在UberConf 2016大会上做了一次关于基于服务架构的演讲&#xff0c;基于服务架构是介于面向服务架构…

html5中 save方法,如何HTML5画布另存为窗口8 Metro应用中的图像文件?(How to save html5 c...

var myImage canvas.toDataURL("image/png");我认为myImage在现在png格式如何保存编码的图像字节myImage作为一个文件(图片文件夹)&#xff1f;Answer 1:而不是使用的.toDataUrl &#xff0c;你需要使用.msToBlob &#xff1a;var blob canvas.msToBlob();然后&…

系统架构师8

软考——系统架构设计师工作日志 《E:\Myproject\利亚德\x系统架构设计师\系统架构设计师工作日志.txt》 系统架构设计师 ok --》主要信息 官方&#xff1a; 人事考试服务频道.mht http://www.bjld.gov.cn/bjpta/ 北京人事考试 http://www.bjld.g…

Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

Autofac 结合 Castle DynamicProxy2 功能 Autofac 不仅作为轻量级高效的 IoC 容器&#xff0c;而且还能很好的与 Castle.DynamicProxy2 结合起来&#xff0c;实现 AOP 功能。 首先&#xff0c;我们需要定义拦截器&#xff0c;简单的定义可实现 Castle.DynamicProxy.IIntercepto…

类和对象运行时在内存里是怎么样的?各种变量、方法在运行时是怎么交互的?

转载自 类和对象运行时在内存里是怎么样的&#xff1f;各种变量、方法在运行时是怎么交互的&#xff1f;在回答这个问题之前先了解一下Java的一些基础知识。我们知道Java程序运行在虚拟机环境里&#xff0c;那我们先看一下虚拟机的大致内存结构。如下图所示&#xff0c;虚线框…

java通过commons-fileupload实现多张图片的上传(jsp页面)

<div id"middle"><div id"form"><form action"ProductInfoServlet?tagadd" method"post" enctype"multipart/form-data" ><h2>三只松鼠--新增</h2><table align"center">&l…

系统架构师7

2017年11月11日 软件系统架构师考试经验分享 置顶 2017年11月13日 15:25:53 凌飞安 阅读数 7812 版权声明&#xff1a;原创作品&#xff0c;转载请注明出处&#xff01;个人主页 http://www.lingfeian.com https://blog.csdn.net/lingfeian/article/details/78520808 系统架构…

工业利用计算机实现生产自动化属于,自动化考试试题(含答案)

第一类&#xff1a;填空题一&#xff0e;填空题1&#xff0e;自动化控制系统按被控量的时间特性分为(连续量)和(离散量)。2&#xff0e;PLC 全称为(可编程序逻辑控制器)&#xff0c;DCS全称为( 集散控制系统)。3&#xff0e;输入输出单元是(PLC)与工业过程控制现场之间的连接部…

保定有国家承认的计算机学校吗,河北省122所大学名单,不在名单内的都是国家不承认的野鸡学校...

原标题&#xff1a;河北省122所大学名单&#xff0c;不在名单内的都是国家不承认的野鸡学校据教育部官网信息显示&#xff0c;截至2019年6月15日&#xff0c;河北省共有普通高等学校122所&#xff0c;其中本科院校61所&#xff0c;专科院校61所。在名单中虽然有一所211院校&…

从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?

转载自 从Java类到对象的创建过程都做了些啥&#xff1f;内存中的对象是啥样的&#xff1f;先回顾一下Java程序执行的过程&#xff1a;Java程序执行时&#xff0c;第一步系统创建虚拟机进程&#xff0c;然后虚拟器用类加载器Class Loader加载java程序类文件到方法区。方法区放…

ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件

ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core。 曾经在WebForms上写过 HighchartsNET快速图表控件-开源 Highcharts的ASP.NET Web自定义控件。 今天我就来改造它&#xff0c;将其使用最新的TagHelper 来实践&#xff0c;学习TagHelper 的使用…

架构师6

系统架构师考试总结 2019年06月11日 10:48:47 devillyd2018 阅读数 103 2011年11月12日&#xff0c;在这个百年一遇的大单身节的第二天&#xff0c;我怀着无比紧张的心情走进了系统架构师的考场。 虽然暂时还不知道我的成绩&#xff0c;无所谓啦&#xff0c;虽然答的一般&…

计算机视觉论文doc,嘉炬-计算机视觉论文资料.doc

成 绩评卷人姓 名嘉炬学 号华 中 师 范 大 学研 究 生 课 程 论 文论文题目 计算机视觉技术在教育领域的应用完成时间 2015年1月15日课程名称 计算机视觉专 业 通信与信息系统年 级 2014级注&#xff1a;研究生须在规定期限内完成课程论文&#xff0c;并用A4页面打印&#xff0…