内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查.

代码如下 :

  1. package lhm.hcy.guge.frameset.cache;
  2. import java.util.*;
  3. //Description: 管理缓存
  4. //可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间
  5. public class CacheManager {
  6. private static HashMap cacheMap = new HashMap();
  7. //单实例构造方法
  8. private CacheManager() {
  9. super();
  10. }
  11. //获取布尔值的缓存
  12. public static boolean getSimpleFlag(String key){
  13. try{
  14. return (Boolean) cacheMap.get(key);
  15. }catch(NullPointerException e){
  16. return false;
  17. }
  18. }
  19. public static long getServerStartdt(String key){
  20. try {
  21. return (Long)cacheMap.get(key);
  22. } catch (Exception ex) {
  23. return 0;
  24. }
  25. }
  26. //设置布尔值的缓存
  27. public synchronized static boolean setSimpleFlag(String key,boolean flag){
  28. if (flag && getSimpleFlag(key)) {//假如为真不允许被覆盖
  29. return false;
  30. }else{
  31. cacheMap.put(key, flag);
  32. return true;
  33. }
  34. }
  35. public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){
  36. if (cacheMap.get(key) == null) {
  37. cacheMap.put(key,serverbegrundt);
  38. return true;
  39. }else{
  40. return false;
  41. }
  42. }
  43. //得到缓存。同步静态方法
  44. private synchronized static Cache getCache(String key) {
  45. return (Cache) cacheMap.get(key);
  46. }
  47. //判断是否存在一个缓存
  48. private synchronized static boolean hasCache(String key) {
  49. return cacheMap.containsKey(key);
  50. }
  51. //清除所有缓存
  52. public synchronized static void clearAll() {
  53. cacheMap.clear();
  54. }
  55. //清除某一类特定缓存,通过遍历HASHMAP下的所有对象,来判断它的KEY与传入的TYPE是否匹配
  56. public synchronized static void clearAll(String type) {
  57. Iterator i = cacheMap.entrySet().iterator();
  58. String key;
  59. ArrayList arr = new ArrayList();
  60. try {
  61. while (i.hasNext()) {
  62. java.util.Map.Entry entry = (java.util.Map.Entry) i.next();
  63. key = (String) entry.getKey();
  64. if (key.startsWith(type)) { //如果匹配则删除掉
  65. arr.add(key);
  66. }
  67. }
  68. for (int k = 0; k < arr.size(); k++) {
  69. clearOnly(arr.get(k));
  70. }
  71. } catch (Exception ex) {
  72. ex.printStackTrace();
  73. }
  74. }
  75. //清除指定的缓存
  76. public synchronized static void clearOnly(String key) {
  77. cacheMap.remove(key);
  78. }
  79. //载入缓存
  80. public synchronized static void putCache(String key, Cache obj) {
  81. cacheMap.put(key, obj);
  82. }
  83. //获取缓存信息
  84. public static Cache getCacheInfo(String key) {
  85. if (hasCache(key)) {
  86. Cache cache = getCache(key);
  87. if (cacheExpired(cache)) { //调用判断是否终止方法
  88. cache.setExpired(true);
  89. }
  90. return cache;
  91. }else
  92. return null;
  93. }
  94. //载入缓存信息
  95. public static void putCacheInfo(String key, Cache obj, long dt,boolean expired) {
  96. Cache cache = new Cache();
  97. cache.setKey(key);
  98. cache.setTimeOut(dt + System.currentTimeMillis()); //设置多久后更新缓存
  99. cache.setValue(obj);
  100. cache.setExpired(expired); //缓存默认载入时,终止状态为FALSE
  101. cacheMap.put(key, cache);
  102. }
  103. //重写载入缓存信息方法
  104. public static void putCacheInfo(String key,Cache obj,long dt){
  105. Cache cache = new Cache();
  106. cache.setKey(key);
  107. cache.setTimeOut(dt+System.currentTimeMillis());
  108. cache.setValue(obj);
  109. cache.setExpired(false);
  110. cacheMap.put(key,cache);
  111. }
  112. //判断缓存是否终止
  113. public static boolean cacheExpired(Cache cache) {
  114. if (null == cache) { //传入的缓存不存在
  115. return false;
  116. }
  117. long nowDt = System.currentTimeMillis(); //系统当前的毫秒数
  118. long cacheDt = cache.getTimeOut(); //缓存内的过期毫秒数
  119. if (cacheDt <= 0||cacheDt>nowDt) { //过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE
  120. return false;
  121. } else { //大于过期时间 即过期
  122. return true;
  123. }
  124. }
  125. //获取缓存中的大小
  126. public static int getCacheSize() {
  127. return cacheMap.size();
  128. }
  129. //获取指定的类型的大小
  130. public static int getCacheSize(String type) {
  131. int k = 0;
  132. Iterator i = cacheMap.entrySet().iterator();
  133. String key;
  134. try {
  135. while (i.hasNext()) {
  136. java.util.Map.Entry entry = (java.util.Map.Entry) i.next();
  137. key = (String) entry.getKey();
  138. if (key.indexOf(type) != -1) { //如果匹配则删除掉
  139. k++;
  140. }
  141. }
  142. } catch (Exception ex) {
  143. ex.printStackTrace();
  144. }
  145. return k;
  146. }
  147. //获取缓存对象中的所有键值名称
  148. public static ArrayList getCacheAllkey() {
  149. ArrayList a = new ArrayList();
  150. try {
  151. Iterator i = cacheMap.entrySet().iterator();
  152. while (i.hasNext()) {
  153. java.util.Map.Entry entry = (java.util.Map.Entry) i.next();
  154. a.add((String) entry.getKey());
  155. }
  156. } catch (Exception ex) {} finally {
  157. return a;
  158. }
  159. }
  160. //获取缓存对象中指定类型 的键值名称
  161. public static ArrayList getCacheListkey(String type) {
  162. ArrayList a = new ArrayList();
  163. String key;
  164. try {
  165. Iterator i = cacheMap.entrySet().iterator();
  166. while (i.hasNext()) {
  167. java.util.Map.Entry entry = (java.util.Map.Entry) i.next();
  168. key = (String) entry.getKey();
  169. if (key.indexOf(type) != -1) {
  170. a.add(key);
  171. }
  172. }
  173. } catch (Exception ex) {} finally {
  174. return a;
  175. }
  176. }
  177. }
  178. package lhm.hcy.guge.frameset.cache;
  179. public class Cache {
  180. private String key;//缓存ID
  181. private Object value;//缓存数据
  182. private long timeOut;//更新时间
  183. private boolean expired; //是否终止
  184. public Cache() {
  185. super();
  186. }
  187. public Cache(String key, Object value, long timeOut, boolean expired) {
  188. this.key = key;
  189. this.value = value;
  190. this.timeOut = timeOut;
  191. this.expired = expired;
  192. }
  193. public String getKey() {
  194. return key;
  195. }
  196. public long getTimeOut() {
  197. return timeOut;
  198. }
  199. public Object getValue() {
  200. return value;
  201. }
  202. public void setKey(String string) {
  203. key = string;
  204. }
  205. public void setTimeOut(long l) {
  206. timeOut = l;
  207. }
  208. public void setValue(Object object) {
  209. value = object;
  210. }
  211. public boolean isExpired() {
  212. return expired;
  213. }
  214. public void setExpired(boolean b) {
  215. expired = b;
  216. }
  217. }
  218. //测试类,
  219. class Test {
  220. public static void main(String[] args) {
  221. System.out.println(CacheManager.getSimpleFlag("alksd"));
  222. //        CacheManager.putCache("abc", new Cache());
  223. //        CacheManager.putCache("def", new Cache());
  224. //        CacheManager.putCache("ccc", new Cache());
  225. //        CacheManager.clearOnly("");
  226. //        Cache c = new Cache();
  227. //        for (int i = 0; i < 10; i++) {
  228. //            CacheManager.putCache("" + i, c);
  229. //        }
  230. //        CacheManager.putCache("aaaaaaaa", c);
  231. //        CacheManager.putCache("abchcy;alskd", c);
  232. //        CacheManager.putCache("cccccccc", c);
  233. //        CacheManager.putCache("abcoqiwhcy", c);
  234. //        System.out.println("删除前的大小:"+CacheManager.getCacheSize());
  235. //        CacheManager.getCacheAllkey();
  236. //        CacheManager.clearAll("aaaa");
  237. //        System.out.println("删除后的大小:"+CacheManager.getCacheSize());
  238. //        CacheManager.getCacheAllkey();
  239. }
  240. }

转载于:https://www.cnblogs.com/Struts-pring/p/4898917.html

内存缓存 原理 实现相关推荐

  1. 内存缓存LruCache实现原理

    自己项目中一直都是用的开源的xUtils框架,包括 BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下 xUtil ...

  2. Hibernate缓存原理与策略 Hibernate缓存原理:

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  3. 【MDCC 2015】开源选型之Android三大图片缓存原理、特性对比

    from: http://www.csdn.net/article/2015-10-21/2825984 [CSDN现场报道]10月14日-16日," 2015移动开发者大会 · 中国&qu ...

  4. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )

    文章目录 一.Bitmap 内存缓存策略 二.LruCache 内存缓存 三.LruCache 常用操作 四.LruCache 工具类 五.源码及资源下载 官方参考 : Google 官方提供的 内存 ...

  5. java cache详解,Java内存缓存详解

    1.缓存为什么要存在 应用服务器资源是有限的,数据库每秒中接受请求的次数也是有限的.如果利用有限的资源来提供尽可能大的吞吐量呢,一个办法:减少计 算量,缩短请求流程(减少网络io或者硬盘io),这时候 ...

  6. mysql php 缓存机制_mysql数据库查询缓存原理是什么

    mysql数据库查询缓存原理是:1.缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集:2.如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把 ...

  7. 操作系统原理_读懂操作系统之缓存原理(cache)(三)

    本节内容计划是讲解TLB与高速缓存的关系,但是在涉及高速缓的前提是我们必须要了解操作系统缓存原理,所以提前先详细了解下缓存原理,我们依然是采取循序渐进的方式来解答缓存原理,若有叙述不当之处,还请批评指 ...

  8. Android-Universal-Image-Loader学习笔记(3)--内存缓存

    前面的两篇博客写了文件缓存.如今说说Android-Universal-Image-Loader的内存缓存.该内存缓存涉及到的类如图所看到的 这些类的继承关系例如以下图所看到的: 如同文件缓存一样,内 ...

  9. 【Linux内核】内存映射原理

    [Linux内核]内存映射原理 物理地址空间 物理地址是处理器在总线上能看到的地址,使用RISC(Reduced Instruction Set Computing精简指令集)的处理器通常只实现一个物 ...

最新文章

  1. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集
  2. Linux下修改MAC地址总结
  3. 网络抖动多少ms算正常_子宫内膜厚度多少算正常?
  4. python推荐书籍-7本经典的Python书籍,你都读过了么?
  5. python装饰器原理-python装饰器的原理和使用
  6. Python简单主机批量管理工具
  7. 预告:大牛现身说法 TensorFlow在工程项目中的应用 | AI 研习社
  8. 面试官:Redis 主从复制时网络开小差了怎么整?
  9. UI图标设计素材|风格多样的图标
  10. koolshare离线插件下载_还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦
  11. 页面404?找不到页面咋整?
  12. 贺利坚老师汇编课程42笔记:DIV除法指令
  13. 华为HG255d WEB刷OpenWrt
  14. SOP24/SSOP24低功耗LCD驱动芯片VK1056B规格书下载
  15. c语言编程输出等腰三角形,C语言输出等腰三角形
  16. IBM Cloud 2015 - Invoice - 03 payment 支付方式
  17. Redis如何保存数组和对象
  18. [转载记录]系统的UIM卡介绍
  19. 孝经白话:广要道章第十二
  20. 使用ThinkJs搭建微信中控服务

热门文章

  1. java8 lambda表达式Stream对List常用操作总结
  2. 基础XML配置的AOP与基于注解实现的AOP详细对比
  3. alert中文信息时乱码,html页面和script标签中均已设置为utf-8依然乱码
  4. ajax嵌套ajax的坏处,promise解决ajax的多重嵌套
  5. 基于jQuery的窗口插件:jMessageBox
  6. testng执行参数_初识TestNG测试框架
  7. 如果一栋楼起火谁赔偿_电动车起火,楼上25人被困,万宁一居民楼发生惊险一幕...
  8. java case用法_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作
  9. 转载 2020-02-18 在KVM主机和虚拟机之间共享目录
  10. 【转载】什么时候该选C语言实现业务逻辑,什么时候该选Python?