Java简单实现本地缓存

注意:此代码不适合集群部署环境

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** 简单实现缓存服务** @author moumou* @date 2022/8/9 14:12*/
public class Cache {/*** 有效时间30分钟:30 * 60 * 1000*/private static final long CACHE_HOLD_TIME_30M = 1800000L;/*** 有效时间key后缀*/private static final String SECONDS = "_seconds";private static volatile Cache cache;private static Map<String, Object> CACHE_MAP;private Cache() {CACHE_MAP = new ConcurrentHashMap<>();}public static Cache getInstance() {if (cache == null) {synchronized (Cache.class) {if (cache == null) {cache = new Cache();}}}return cache;}/*** 存放一个缓存对象,默认保存时间30分钟** @param cacheName 缓存名称* @param obj       缓存对象*/public void put(String cacheName, Object obj) {put(cacheName, obj, CACHE_HOLD_TIME_30M);}/*** 存放一个缓存对象,保存时间为holdTime** @param cacheName 缓存名称* @param obj       缓存对象* @param seconds   时间*/public void put(String cacheName, Object obj, long seconds) {CACHE_MAP.put(cacheName, obj);// 设置缓存失效时间CACHE_MAP.put(cacheName + SECONDS, System.currentTimeMillis() + seconds);}/*** 取出一个缓存对象** @param cacheName 缓存名称* @return 缓存对象*/public Object get(String cacheName) {if (checkCacheName(cacheName)) {return CACHE_MAP.get(cacheName);}return null;}/*** 删除某个缓存** @param cacheName 缓存名称*/public void remove(String cacheName) {CACHE_MAP.remove(cacheName);CACHE_MAP.remove(cacheName + SECONDS);}/*** 检查缓存对象是否存在,* 若不存在,则返回false* 若存在,检查其是否已过有效期,如果已经过了则删除该缓存并返回false** @param cacheName 缓存名称* @return 缓存对象是否存在*/public boolean checkCacheName(String cacheName) {Long seconds = (Long) CACHE_MAP.get(cacheName + SECONDS);if (seconds == null || seconds == 0L) {return false;}if (seconds < System.currentTimeMillis()) {remove(cacheName);return false;}return true;}
}

Java简单实现本地缓存相关推荐

  1. java 缓存的简单实现_Java8简单的本地缓存实现

    这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在key为Null的时候自动计算一个新的value值.非常适合实现cache. ...

  2. java 缓存_Java8简单的本地缓存实现

    原文链接 译文链接 翻译:踏雁寻花,校对:丁一 这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在key为Null的时候自动计 ...

  3. 为什么用redis做缓存而不是mybatis自带的缓存_如何用Java设计一个本地缓存,涨姿势了...

    最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存:一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能. 当然如果拿来和专门的缓存 ...

  4. 构建本地缓存java_Java8简单的本地缓存实现

    这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在key为Null的时候自动计算一个新的value值.非常适合实现cache. ...

  5. Java简单的本地邮箱服务器发送(javax.mail)

    推荐使用标题5 1.安装使用易游服务器以及Foxmail 易游服务器傻瓜式安装 Foxmail 向导部分请断网 2.简单的入门案例 1.创建mevan项目 2.引入坐标 <!-- Javamai ...

  6. java本地缓存简介

    java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了. 为什么要有本地缓存? 在 ...

  7. java本地缓存_java缓存——(五)LocalCache本地缓存分享

    LocalCache本地缓存分享 前言 一.本地缓存应用场景 二.java本地缓存标准 三.java开源缓存框架 四.LocalCache实现 结束语 前言 本次分享探讨java平台的本地缓存,是指占 ...

  8. 本地缓存之王-Caffeine

    引言 随着业务体量的增长,使用的缓存方案一般会经过:1)无缓存直接查DB:2)数据同步+Redis:3)多级缓存 三个阶段. 第1阶段直接查DB只能用于小流量场景,随着QPS升高,需要引入缓存来减轻D ...

  9. LocalCache本地缓存分享

    LocalCache本地缓存分享 前言 一.本地缓存应用场景 二.java本地缓存标准 三.java开源缓存框架 四.LocalCache实现 结束语 前言 本次分享探讨java平台的本地缓存,是指占 ...

最新文章

  1. mysql判断视图是否存在_使用JDBC查询是否存在某表或视图,按月动态生成表
  2. mysql 分析执行计划的效率_MySQL执行计划分析
  3. 【转载】adb shell dumpsys 查看内存
  4. android 密码加密
  5. 文件传输基础——Java IO流
  6. mysql cstmt_MySQL
  7. 组策略对应于注册表位置汇总
  8. django 最佳实践_通过这些最佳实践来改进Django项目
  9. 数据库维护管理和监视新特性
  10. UI设计素材干货,字体设计灵感酷站
  11. 4.致远插件的初使用 1Rest远程调用项目介绍
  12. 【uniapp 课程表】
  13. Vue 项目中各种痛点问题及方案(建议收藏)
  14. errors potentially fixable with the `--fix` option报错的解决
  15. UVA1449 Dominating Patterns
  16. 【C语言程序设计进阶-浙大翁恺】C语言笔记 文件
  17. Kafka 2.8.0 学习
  18. CDH5(CDH 5.16.1)安装
  19. 【香蕉oi】燃烧的火焰(最短路、状压)
  20. mysql 处理字符串 减断_Mysql处理字符串函数(转)

热门文章

  1. Python批量给文件改名的两种方法
  2. 【STM32F429的DSP教程】第21章 DSP矩阵运算-加法,减法和逆矩阵
  3. SysML和UML建模工具
  4. php 商品价格区间表,ThinkPHP框架,按分类,计算商品价格区间,来完成价格搜索...
  5. 【新版发布】ComponentOne 新增 .NET 6 和 Blazor 平台控件支持
  6. uniapp:常用跨端业务组件(ts版本)
  7. 超级计算机方程式,超级计算机重建宇宙从大爆炸到今天
  8. 1,认识js,基础认识一
  9. matlab中怎么表示几次方,用while 语句编写程式,k=1+2+4+8+…+2的62次方+2的63次方matlab中...
  10. XDOC的使用和一些问题总结