首页 / 缓存 / Map实现java缓存机制的简单实例
Map实现java缓存机制的简单实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Map实现java缓存机制的简单实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6456字,纯文字阅读大概需要10分钟。
内容图文
缓存是Java中主要的内容,主要目的是缓解项目访问数据库的压力以及提升访问数据的效率,以下是通过Map实现java缓存的功能,并没有用cache相关框架。
一、缓存管理类 CacheMgr.java
package com.henu.util; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * 缓存管理类 * * @author Administrator * */ public class CacheMgr { private static Map cacheMap = new HashMap(); privatestatic Map cacheConfMap = new HashMap(); privatestatic CacheMgr cm = null; // 构造方法private CacheMgr() { } publicstatic CacheMgr getInstance() { if (cm == null) { cm = new CacheMgr(); Thread t = new ClearCache(); t.start(); } return cm; } /** * 增加缓存 * * @param key * @param value * @param ccm * 缓存对象 * @return*/publicboolean addCache(Object key, Object value, CacheConfModel ccm) { System.out.println("开始增加缓存-------------"); boolean flag = false; try { cacheMap.put(key, value); cacheConfMap.put(key, ccm); System.out.println("增加缓存结束-------------"); System.out.println("now addcache==" + cacheMap.size()); flag = true; } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 获取缓存实体 */public Object getValue(String key) { Object ob = cacheMap.get(key); if (ob != null) { return ob; } else { returnnull; } } /** * 获取缓存数据的数量 * * @return*/publicint getSize() { return cacheMap.size(); } /** * 删除缓存 * * @param key * @return*/publicboolean removeCache(Object key) { boolean flag = false; try { cacheMap.remove(key); cacheConfMap.remove(key); flag = true; } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 清除缓存的类 继承Thread线程类 */privatestaticclass ClearCache extends Thread { publicvoid run() { while (true) { Set tempSet = new HashSet(); Set set = cacheConfMap.keySet(); Iterator it = set.iterator(); while (it.hasNext()) { Object key = it.next(); CacheConfModel ccm = (CacheConfModel) cacheConfMap.get(key); // 比较是否需要清除if (!ccm.isForever()) { if ((new Date().getTime() - ccm.getBeginTime()) >= ccm .getDurableTime() * 60 * 1000) { // 可以清除,先记录下来 tempSet.add(key); } } } // 真正清除 Iterator tempIt = tempSet.iterator(); while (tempIt.hasNext()) { Object key = tempIt.next(); cacheMap.remove(key); cacheConfMap.remove(key); } System.out.println("now thread================>" + cacheMap.size()); // 休息try { Thread.sleep(60 * 1000L); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
二、缓存属性类 CacheConfModel.java
package com.henu.util; /** * 缓存属性类 * * @author Administrator * */ public class CacheConfModel implements java.io.Serializable { privatelong beginTime;// 缓存开始时间privateboolean isForever = false;// 是否持久privateint durableTime;// 持续时间publiclong getBeginTime() { return beginTime; } publicvoid setBeginTime(long beginTime) { this.beginTime = beginTime; } publicboolean isForever() { return isForever; } publicvoid setForever(boolean isForever) { this.isForever = isForever; } publicint getDurableTime() { return durableTime; } publicvoid setDurableTime(int durableTime) { this.durableTime = durableTime; } }
三、配置启动项目时自动加载 web.xml
<? xml version="1.0" encoding="UTF-8" ?> < web-app version ="2.5" xmlns ="http://java.sun.com/xml/ns/javaee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > < servlet > < servlet-name >testCache</servlet-name><servlet-class>cache.com.Cservlet</servlet-class></servlet><servlet-mapping><servlet-name>testCache</servlet-name><url-pattern>/testCache.do</url-pattern></servlet-mapping><servlet><servlet-name>cacheinitservlet</servlet-name><servlet-class>cache.com.LoadCache</servlet-class><load-on-startup>2</load-on-startup></servlet><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
四、自动加载缓存的类 LoadCache.java,在此类中实现你想要初始化的缓存数据
package cache.com; import java.util.Date; import javax.servlet.http.HttpServlet; import cache.com.CacheConfModel; import cache.com.CacheMgr; /** * 项目启动时默认加载缓存数据类 * @author Administrator */ public class LoadCache extends HttpServlet{ publicvoid init(){ addData(); } /** * 项目启动时加载缓存 */publicvoid addData(){ System.out.println("进入加载缓存addData()………………。"); CacheMgr cm=CacheMgr.getInstance(); CacheConfModel cModel=new CacheConfModel(); Date d=new Date(); cModel.setBeginTime(d.getTime()); cModel.setDurableTime(60); cModel.setForever(true); cm.addCache("kk", "123", cModel);//在缓存加值 } }
五、写一个测试类 Cservlet.java,我在这里写了一个servlet类进行测试的
package cache.com; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 测试读取、添加缓存数据等 * @author Administrator */ public class Cservlet extends HttpServlet{ publicvoid service(HttpServletRequest request,HttpServletResponse response){ try { System.out.println("进入servlet类............"); request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); //3.设置响应类型 PrintWriter out = response.getWriter(); CacheMgr cm=CacheMgr.getInstance(); int numm=cm.getSize();//获取缓存个数 Object ob=cm.getValue("kk"); System.out.println("numm===========//======"+numm); out.println("缓存个数为:"+numm); out.println("缓存数值:value===="+ob); } catch (Exception e) { e.printStackTrace(); } } }
六、写一个简单的按钮页面 index.jsp
<% @ page language = " java " import = " java.util.* " pageEncoding = " utf-8 " %> <% String path = request.getContextPath(); String basePath = request.getScheme() + " :// " + request.getServerName() + " : " + request.getServerPort() + path + " / " ; %> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > < html > < head > < base href ="<%=basePath%>" > < title >My JSP ‘index.jsp‘ starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!-- <link rel="stylesheet" type="text/css" href="styles.css"> --></head><body><form action="testCache.do" method="post"><button type="submit">获取缓存数据</button></form></body></html>
启动项目后点击按钮 “获取缓存数据” 后,出现如下图说明缓存成功并成功取值了
原文:http://www.cnblogs.com/henuyuxiang/p/7486120.html
内容总结
以上是互联网集市为您收集整理的Map实现java缓存机制的简单实例全部内容,希望文章能够帮你解决Map实现java缓存机制的简单实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。