【工具篇】使用concurrentHashMap实现缓存工具类

简介: 【工具篇】使用concurrentHashMap实现缓存工具类

示例代码:

import lombok.extern.slf4j.Slf4j;
import java.util.;
import java.util.concurrent.
;

/**

  • @author xxkfz
  • 自定义缓存
    */
    @Slf4j
    public class ConcurrentHashMapCache {

    private final Map CACHE_MAP = new ConcurrentHashMap();

    /**

    • 每个缓存生效时间12小时
      /
      public final long CACHE_HOLD_TIME_12H = 12
      60 60 1000L;

      /**

    • 每个缓存生效时间24小时
      /
      public final long CACHE_HOLD_TIME_24H = 24
      60 60 1000L;

      /**

    • 存放一个缓存对象,默认保存时间12小时
      *
    • @param cacheName
    • @param obj
      */
      public void put(String cacheName, Object obj) {
      put(cacheName, obj, CACHE_HOLD_TIME_12H);
      }

      /**

    • 存放一个缓存对象,保存时间为holdTime
      *
    • @param cacheName
    • @param obj
    • @param holdTime
      */
      public void put(String cacheName, Object obj, long holdTime) {
      CACHE_MAP.put(cacheName, obj);
      // 设置缓存失效时间
      CACHE_MAP.put(cacheName + "_HoldTime", System.currentTimeMillis() + holdTime);
      log.info("{}:成功存入缓存! 过期时间:{}", cacheName, holdTime);
      }

      /**

    • 取出一个缓存对象
      *
    • @param cacheName
    • @return
      */
      public Object get(String cacheName) {
      if (checkCacheName(cacheName)) {

       return CACHE_MAP.get(cacheName);
      

      }
      return null;
      }

      /**

    • 删除所有缓存
      */
      public void removeAll() {
      CACHE_MAP.clear();
      }

      /**

    • 删除某个缓存
      *
    • @param cacheName
      */
      public void remove(String cacheName) {
      CACHE_MAP.remove(cacheName);
      CACHE_MAP.remove(cacheName + "_HoldTime");
      }

      /**

    • 检查缓存对象是否存在,
    • 若不存在,则返回false
    • 若存在,检查其是否已过有效期,如果已经过了则删除该缓存并返回false
      *
    • @param cacheName
    • @return
      */
      public boolean checkCacheName(String cacheName) {
      Long cacheHoldTime = (Long) CACHE_MAP.get(cacheName + "_HoldTime");
      if (cacheHoldTime == null || cacheHoldTime == 0L) {

       return false;
      

      }
      if (cacheHoldTime < System.currentTimeMillis()) {

       log.info("缓存:{}已失效!", cacheName);
       remove(cacheName);
       return false;
      

      }
      return true;
      }

      /**

    • 获取缓存大小
      *
    • @return
      */
      public Integer size() {
      if (null != CACHE_MAP && CACHE_MAP.size() > 0) {

       return CACHE_MAP.size();
      

      }
      return 0;
      }

      /**

    • 判断缓存的key是否存在
      *
    • @param cacheName
    • @return
      */
      public boolean isExist(String cacheName) {
      if (!checkCacheName(cacheName)) {
       return Boolean.FALSE;
      
      }
      return CACHE_MAP.containsKey(cacheName);
      }
      }

相关文章
|
缓存 NoSQL Java
Java工具篇之Guava-cache内存缓存
常在业务系统中做开发,不会点高级知识点,有点不好意思了。在业务系统中,提高系统响应速度,提供系统高并发能力,其实方向很简单,三个方向,六个字而已: **缓存降级限流。** 当然这是在排除代码质量非常差的情况,如果代码质量很差,都是while循环和高内存占用,那么其实再怎么做都于事无补。除非你有一个马云爸爸,性能不够,机器来凑嘛。阿里云前来支持(1000台机器够了吗?)
1001 0
|
5天前
|
存储 缓存 NoSQL
【Redis】3、Redis 作为缓存(Redis中的穿透、雪崩、击穿、工具类)
【Redis】3、Redis 作为缓存(Redis中的穿透、雪崩、击穿、工具类)
58 0
|
5天前
|
存储 缓存 JavaScript
genius-storage使用文档,一个浏览器缓存工具
genius-storage使用文档,一个浏览器缓存工具
|
9月前
|
缓存 Java 数据库
字典缓存工具类
在系统设计中,需要考虑到系统性能方面的需求,需要对一些数据字典进行缓存操作。。
137 1
|
10月前
|
缓存 Linux
推荐两款Linux 查看缓存命中率的工具
推荐两款Linux 查看缓存命中率的工具
125 0
|
缓存 安全 Go
Golang:golang-lru一个基于双向链表实现的LRU缓存工具
Golang:golang-lru一个基于双向链表实现的LRU缓存工具
155 0
|
缓存 Java
java 谷歌内存缓存工具类
java 谷歌内存缓存工具类
|
缓存 安全 NoSQL
Java本地缓存工具,LoadingCache的使用(附代码) | Java工具类
Java本地缓存工具,LoadingCache的使用(附代码) | Java工具类
|
缓存 NoSQL Java
TimedCache 带时间缓存工具类,附加监听回调 | Java工具类
TimedCache 带时间缓存工具类,附加监听回调 | Java工具类
TimedCache 带时间缓存工具类,附加监听回调 | Java工具类
|
缓存 前端开发 JavaScript
学习AJAX必知必会(3)~自动重启工具nodemon、缓存问题、请求超时和网络异常、取消重复请求
学习AJAX必知必会(3)~自动重启工具nodemon、缓存问题、请求超时和网络异常、取消重复请求
123 0