当前位置: 首页 > news >正文

java内存缓存实现 与 redis缓存实现 (ConcurrentHashMap 应用)


import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;@Service
public class LocalCacheService {// 核心内存缓存容器(线程安全的ConcurrentHashMap)private final Map<String, Object> localCache = new ConcurrentHashMap<>();/*** 通用内存缓存获取方法* @param cacheKey 缓存键* @param dataLoader 数据加载器(缓存未命中时执行)* @return 缓存或加载的数据*/public <T> T getFromLocalCache(String cacheKey, Supplier<T> dataLoader) {// 1. 从内存缓存获取数据@SuppressWarnings("unchecked")T data = (T) localCache.get(cacheKey);// 2. 缓存命中,直接返回if (data != null) {return data;}// 3. 缓存未命中,执行数据加载逻辑data = dataLoader.get();// 4. 加载成功后放入内存缓存if (data != null) {localCache.put(cacheKey, data);}return data;}/*** 主动清除指定缓存* @param cacheKey 缓存键*/public void removeLocalCache(String cacheKey) {localCache.remove(cacheKey);}/*** 清空所有内存缓存(谨慎使用)*/public void clearAllLocalCache() {localCache.clear();}
}

上面的是 内存缓存 

下面的是 redis缓存

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.function.Supplier;@Service
public class CacheService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 通用缓存获取方法* @param cacheKey 缓存键* @param dataLoader 数据加载器函数* @return 缓存或数据库中的数据*/public <T> T getFromCache(String cacheKey, Supplier<T> dataLoader) {// 从缓存获取数据T data = (T) redisTemplate.opsForValue().get(cacheKey);if (data != null) {return data;}// 缓存未命中,加载数据data = dataLoader.get();if (data != null) {// 放入缓存(永不过期)redisTemplate.opsForValue().set(cacheKey, data);}return data;}
}

本文展示了两种缓存实现方案:1) 基于ConcurrentHashMap的本地内存缓存(LocalCacheService),提供线程安全的缓存操作,包含缓存查询、自动加载、单键清除和全部清除功能;2) Redis分布式缓存(CacheService),通过RedisTemplate实现,包含基本的缓存查询和自动加载功能。两种方案均采用Supplier接口实现&quot;缓存未命中时自动加载&quot;的模式,其中本地缓存适用于单机高频访问场景,Redis缓存适用于分布式环境。代码结构清晰,展示了Sprin

http://www.lryc.cn/news/582751.html

相关文章:

  • Mac安装Docker(使用orbstack代替)
  • 从深度学习的角度看自动驾驶
  • ubuntu24.04(vmware workstation 17.6pro)无法安装vmtools的问题解决
  • Using Spring for Apache Pulsar:Quick Tour
  • 短视频矩阵管理平台的崛起:源头厂商的深度解析
  • Rust 的 Copy 语义:深入浅出指南
  • huggingface笔记:文本生成Text generation
  • 【Node.js】文本与 pdf 的相互转换
  • 在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略
  • 京东携手HarmonyOS SDK首发家电AR高精摆放功能
  • 代码详细注释:嵌入式Linux LCD汉字显示程序(基于font.h字库头文件)
  • 移动机器人的认知进化:Deepoc大模型重构寻迹本质
  • 数据库表设计:图片存储与自定义数据类型的实战指南
  • FlashAttention 深入浅出
  • C++STL详解(一):string类
  • Spring Boot:影响事务回滚的几种情况
  • Java List 使用详解:从入门到精通
  • 联通线路物理服务器选择的关键要点
  • 短视频矩阵系统的崛起:批量发布功能与多平台矩阵的未来
  • Redis基础学习(五大值数据类型的常用操作命令)
  • 中韩SD-WAN网络加速专线:提升国内与韩国公司网络性能的关键
  • ThreadPoolTaskExecutor 的使用案例
  • 东南亚主播解决方案|东南亚 TikTok 直播专线:纯净住宅 IP 、直播不卡顿
  • 分布式理论:CAP、Base理论
  • iOS打包流程
  • C++11 算法详解:std::copy_if 与 std::copy_n
  • 库制作与原理
  • Web前端开发: :where(伪类函数选择器)
  • Python之--列表
  • 实时音视频通过UDP打洞实现P2P优先通信