1. public class MapCache {
  2.  
  3. /**
  4. * 默认存储1024个缓存
  5. */
  6. private static final int DEFAULT_CACHES = 1024;
  7.  
  8. private static final MapCache INS = new MapCache();
  9.  
  10. public static MapCache single() {
  11. return INS;
  12. }
  13.  
  14. /**
  15. * 缓存容器
  16. */
  17. private static Map<String, CacheObject> cachePool;
  18.  
  19. public MapCache() {
  20. this(DEFAULT_CACHES);
  21. }
  22.  
  23. public MapCache(int cacheCount) {
  24. cachePool = new ConcurrentHashMap(cacheCount);
  25. }
  26.  
  27. /**
  28. * 读取一个缓存
  29. *
  30. * @param key 缓存key
  31. * @param <T>
  32. * @return
  33. */
  34. public static <T> T get(String key) {
  35. CacheObject cacheObject = cachePool.get(key);
  36. if (null != cacheObject) {
  37. long cur = System.currentTimeMillis() / 1000;
  38. if (cacheObject.getExpired() <= 0 || cacheObject.getExpired() > cur) {
  39. Object result = cacheObject.getValue();
  40. return (T) result;
  41. }
  42. }
  43. return null;
  44. }
  45.  
  46. /**
  47. * 读取一个hash类型缓存
  48. *
  49. * @param key 缓存key
  50. * @param field 缓存field
  51. * @param <T>
  52. * @return
  53. */
  54. public <T> T hget(String key, String field) {
  55. key = key + ":" + field;
  56. return this.get(key);
  57. }
  58.  
  59. /**
  60. * 设置一个缓存
  61. *
  62. * @param key 缓存key
  63. * @param value 缓存value
  64. */
  65. public static void set(String key, Object value) {
  66. INS.set(key, value, -1);
  67. }
  68.  
  69. /**
  70. * 设置一个缓存并带过期时间
  71. *
  72. * @param key 缓存key
  73. * @param value 缓存value
  74. * @param expired 过期时间,单位为秒
  75. */
  76. public void set(String key, Object value, long expired) {
  77. expired = expired > 0 ? System.currentTimeMillis() / 1000 + expired : expired;
  78. CacheObject cacheObject = new CacheObject(key, value, expired);
  79. cachePool.put(key, cacheObject);
  80. }
  81.  
  82. /**
  83. * 设置一个hash缓存
  84. *
  85. * @param key 缓存key
  86. * @param field 缓存field
  87. * @param value 缓存value
  88. */
  89. public void hset(String key, String field, Object value) {
  90. this.hset(key, field, value, -1);
  91. }
  92.  
  93. /**
  94. * 设置一个hash缓存并带过期时间
  95. *
  96. * @param key 缓存key
  97. * @param field 缓存field
  98. * @param value 缓存value
  99. * @param expired 过期时间,单位为秒
  100. */
  101. public void hset(String key, String field, Object value, long expired) {
  102. key = key + ":" + field;
  103. expired = expired > 0 ? System.currentTimeMillis() / 1000 + expired : expired;
  104. CacheObject cacheObject = new CacheObject(key, value, expired);
  105. cachePool.put(key, cacheObject);
  106. }
  107.  
  108. /**
  109. * 根据key删除缓存
  110. *
  111. * @param key 缓存key
  112. */
  113. public static void del(String key) {
  114. cachePool.remove(key);
  115. }
  116.  
  117. /**
  118. * 根据key和field删除缓存
  119. *
  120. * @param key 缓存key
  121. * @param field 缓存field
  122. */
  123. public void hdel(String key, String field) {
  124. key = key + ":" + field;
  125. this.del(key);
  126. }
  127.  
  128. /**
  129. * 清空缓存
  130. */
  131. public void clean() {
  132. cachePool.clear();
  133. }
  134.  
  135. static class CacheObject {
  136. private String key;
  137. private Object value;
  138. private long expired;
  139.  
  140. public CacheObject(String key, Object value, long expired) {
  141. this.key = key;
  142. this.value = value;
  143. this.expired = expired;
  144. }
  145.  
  146. public String getKey() {
  147. return key;
  148. }
  149.  
  150. public Object getValue() {
  151. return value;
  152. }
  153.  
  154. public long getExpired() {
  155. return expired;
  156. }
  157. }
  158. }

转载处:https://blog.csdn.net/xsj_blog/article/details/83056143

Map作为缓存使用的更多相关文章

  1. java使用Map做缓存你真的用对了吗?弱引用WeakHashMap了解一下

    目录 关于缓存我们应该考虑什么?-intsmaze WeakHashMap弱引用-intsmaze 线程安全问题-intsmaze Collections-intsmaze ThreadLocal-i ...

  2. Java 使用 Map 实现缓存工具

    以下代码参考于网上,做了小部分修改. 该代码实现了定时清除临时缓存的功能. 缓存管理类 package com.wbproject.util.cache; import java.time.Local ...

  3. Map实现缓存

    为什么要使用缓存 缓存最终的目的是为减轻服务端压力,减少网络传输请求 客户端缓存 浏览器访问自带缓存~~ 页面缓存 浏览器缓存 App客户端缓存    IOS 前端开发     底层都有缓存技术的 ( ...

  4. map全局缓存demo

    import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; ...

  5. 为什么要用 redis 而不用 map 做缓存?

    缓存分为本地缓存和分布式缓存.以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例 ...

  6. Redis和MemCache静态Map做缓存区别

    本地缓存和分布式缓存 本地缓存:使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着jvm的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不 ...

  7. 简单的Map缓存机制实现

    大致思路是用一个单例的Map实现,当然此Map得是线程安全的--ConcurrentHashMap 原本项目需求是缓存十条消息,所以打算用Map实现缓存机制.中途夭折下面具体尚未实现... 当然此代码 ...

  8. Spring缓存机制的理解

    在spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果:2.在某个方法执行前或后清空缓存. 下面写两个类来模拟Spring的缓存机制: package com.sin90lzc ...

  9. Spring缓存框架原理浅谈

    运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...

随机推荐

  1. 安装Visual Studio 时窗口闪过就退出

    双击安装文件,窗口闪了下就退出了. 解决方法:控制面板 ———程序——程序和功能——打开或关闭Windows功能——关闭NET相关框架. 然后再次安装即可. 参考文献:   VS安装程序一闪而过

  2. vmware-vmx.exe进程应该怎么杀掉

    如何解决VMware-vmx.exe无法彻底删除的问题 遇见的问题就是 虚拟机一直黑屏,强制关机之后,无法再次打开的问题. 显示:无法创建新虚拟机: 无法打开配置文件 以独占方式锁定此配置文件失败.另 ...

  3. 搭建自己的docker镜像

    手动构建 1.关键字查找镜像 sudo docker search centos 2.下载基本镜像 sudo docker pull centos 3.启动容器 sudo docker run -d ...

  4. 达信:深度解读COSO新版企业风险管理框架(ERM)

    http://www.sohu.com/a/124375769_489979 2016年6月,美国反欺诈财务报告委员会(The Committee of Sponsoring Organization ...

  5. jsp获取map

    1.简单Map User user = new User(); user.setName("zmy"); user.setAge(); user.setBirthday(new D ...

  6. html--前端css常用属性

    1.颜色属性 <div style="color:blueviolet">ppppp</div> 输入颜色英文单词 <div style=" ...

  7. hadoop KerberosUtil 做Kerberos认证

    网上找了一下,自己写了个KerberosUtil工具类,测试过可以用. 注意这个不是 org.apache.hadoop.security.authentication.util.KerberosUt ...

  8. shell equal

    #!/bin/shzero=0 status=1 let status=0 if [[ $status -eq $zero ]];then echo "bu >= 3.6"e ...

  9. JavaScriptDOM编程学习笔记(一)DOM概述

    首先介绍下DOM,一套对文档的内容进行抽象和概念化的方法.即Document Object Model,当创建了一个网页并加载到Web浏览器中时,DOM就把编写的网页转换为一个文档对象,而通过浏览器提 ...

  10. python总结二

    1.在命令行:dd是删除光标所在的那一整行 yy是复制光标所在的那一整行 p是将已复制的数据在光标的下一行粘贴 P是将已复制的数据在光标的上一行粘贴 2.在命令行中查找的话 从上往下查找:/ 从下往上 ...