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

springboot 开启缓存 @EnableCaching(使用redis)

添加依赖 pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.yml 配置redis连参数

spring:# redis 配置redis:# 地址host: 127.0.0.1# 端口,默认为6379port: 6379# 数据库索引database: 2# 密码password:# 连接超时时间timeout: 10s

配置类

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;import java.time.Duration;
import java.util.HashMap;
import java.util.Map;@Configuration
public class CacheConfig {/*** 最新版,设置redis缓存过期时间*/@Beanpublic RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {return new RedisCacheManager(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),this.getRedisCacheConfigurationWithTtl( 60) // 默认策略,未配置的 key 会使用这个);}private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).entryTtl(Duration.ofSeconds(seconds));return redisCacheConfiguration;}}

启动类上 加 @EnableCaching 注解

测试

  1. 接口查询 2. 缓存查询验证
@ApiOperation(value = "根据ID获取详情",notes = "查询")
@Cacheable(cacheNames = "testaCache", key = "#id")
@RequestMapping(value = "/get/{id}",method = RequestMethod.GET)
public TestA get(@PathVariable Long id){log.info("进行了mysql查询");return testService.getById(id);
}
 @GetMapping("/get/redis/cache")@ApiOperation(value="查看redis缓存信息")public String getRedisCache(){// 从IOC容器中通过类型获取bean  RedisCacheManager redisCacheManager = SpringUtils.getBean(RedisCacheManager.class);// 从IOC容器中通过名称获取beanRedisCacheManager redisCacheManager2 = SpringUtils.getBean("cacheManager");Cache demoCache = redisCacheManager.getCache("testaCache");log.info(demoCache.get(78, TestA.class)+"");return demoCache.getName();}

SpringUtils.class

import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;@Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware 
{/** Spring应用上下文环境 */private static ConfigurableListableBeanFactory beanFactory;private static ApplicationContext applicationContext;@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {SpringUtils.beanFactory = beanFactory;}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringUtils.applicationContext = applicationContext;}/*** 获取对象** @param name* @return Object 一个以所给名字注册的bean的实例* @throws BeansException**/@SuppressWarnings("unchecked")public static <T> T getBean(String name) throws BeansException{return (T) beanFactory.getBean(name);}/*** 获取类型为requiredType的对象** @param clz* @return* @throws BeansException**/public static <T> T getBean(Class<T> clz) throws BeansException{T result = (T) beanFactory.getBean(clz);return result;}/*** 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true** @param name* @return boolean*/public static boolean containsBean(String name){return beanFactory.containsBean(name);}/*** 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)** @param name* @return boolean* @throws NoSuchBeanDefinitionException**/public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{return beanFactory.isSingleton(name);}/*** @param name* @return Class 注册对象的类型* @throws NoSuchBeanDefinitionException**/public static Class<?> getType(String name) throws NoSuchBeanDefinitionException{return beanFactory.getType(name);}/*** 如果给定的bean名字在bean定义中有别名,则返回这些别名** @param name* @return* @throws NoSuchBeanDefinitionException**/public static String[] getAliases(String name) throws NoSuchBeanDefinitionException{return beanFactory.getAliases(name);}/*** 获取aop代理对象* * @param invoker* @return*/@SuppressWarnings("unchecked")public static <T> T getAopProxy(T invoker){return (T) AopContext.currentProxy();}/*** 获取当前的环境配置,无配置返回null** @return 当前的环境配置*/public static String[] getActiveProfiles(){return applicationContext.getEnvironment().getActiveProfiles();}/*** 获取配置文件中的值** @param key 配置文件的key* @return 当前的配置文件的值**/public static String getRequiredProperty(String key){return applicationContext.getEnvironment().getRequiredProperty(key);}
}

参考示例

相关文章:

springboot 开启缓存 @EnableCaching(使用redis)

添加依赖 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>application.yml 配置redis连参数 spring:# redis 配置redis:# 地址host: 127.0.0.…...

Adobe After Effects AE v24.3.0 解锁版 (视频合成及视频特效制作)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…...

Qt---文件系统

一、基本文件操作 1. QFile对文件进行读和写 QFile file( path 文件路径) 读&#xff1a; file.open(打开方式) QlODevice::readOnly 全部读取->file.readAll()&#xff0c;按行读->file.readLine()&#xff0c;atend()->判断是否读到文件尾 …...

ruoyi-vue-pro 使用记录(2)

ruoyi-vue-pro 使用记录&#xff08;2&#xff09; 数据库商城商品模块数据表营销数据库交易数据库统计数据库 数据库 商城 参考官方文档 ruoyi-vue-pro yudao 项目商城 mall 模块启用及相关SQL脚本 商品模块&#xff08;中心&#xff09;以 product_ 作为前缀的表交易模块…...

centos7中如何全局搜索一下nginx的配置文件?

在CentOS 7中搜索Nginx的配置文件&#xff0c;你可以使用一些常用的命令行工具&#xff0c;比如find、grep等。这些工具可以帮助你在文件系统中查找文件&#xff0c;也可以用来查找Docker容器内部的文件&#xff0c;只要你知道如何访问容器的文件系统。 1. 搜索系统中的Nginx配…...

2024年5月10日有感复盘

2024年5月10日有感复盘 时间 今天是一个很美好的一天&#xff0c;原因是很平凡&#xff0c;读书很平凡&#xff0c;玩游戏很平凡&#xff0c;然后生活很平凡&#xff0c;未来可期&#xff0c;听歌很舒服&#xff0c;很喜欢一个人呆在图书馆的感觉&#xff0c;很喜欢发呆&…...

C++通过json文件配置参数

一、安装nlohmann json nlohmann json&#xff1a;安装_nlohmann安装-CSDN博客 依次执行下面指令&#xff1a; git clone https://gitee.com/cuihongxi/mov_from_github.gitcd json-developmkdir buildcd buildcmake ..makesudo make install 二、安装完成后使用 #include…...

idea连接远程仓库

git ->克隆。 url为远程仓库的地址&#xff0c;输入好后&#xff0c;选择项目存放目录&#xff0c;再点击克隆 点击新窗口打开。 切换到对应分支...

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯&#xff08;Kansas&#xff09;州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天&#xff0c;那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…...

leetcode56--合并区间

题目描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;interv…...

赋能数据库智能托管,Akamai 发布首款云计算业务线产品!

为了尽可能地简化数据库管理的复杂性&#xff0c;降低数据库成本&#xff0c;Akamai 在近期推出了首款 DBaaS&#xff08;数据库即服务&#xff09;产品——Linode Managed Database。这一数据库产品是 Akamai 自3月份收购 Linode 后发布的首款计算业务线产品。 一、更易用的数…...

Go语言系统学习笔记(三):杂项篇

1. 写在前面 公司的新业务开发需要用到go语言&#xff0c;虽然之前没接触过这门语言&#xff0c;但在大模型的帮助下&#xff0c;边看项目边写代码也能进行go的项目开发&#xff0c;不过&#xff0c;写了一段时间代码之后&#xff0c;总感觉对go语言本身&#xff0c;我的知识体…...

黄仁勋炉边对话:创业的超能力与英伟达的加速计算之旅

在TiECon 2024大会上&#xff0c;英伟达的创始人兼CEO黄仁勋与风投公司Mayfield的管理合伙人纳文查德哈进行了一场深入的炉边对话。黄仁勋不仅分享了英伟达的创业故事&#xff0c;还谈到了他对创业和加速计算的深刻见解。下面是我对这次对话的总结&#xff0c;希望能给正在创业…...

.NET开源、功能强大、跨平台的图表库LiveChart2

LiveCharts2 是 从LiveCharts演变而来,它修复了其前身的主要设计问题,它专注于在任何地方运行,提高了灵活性,并继承LiveCharts原有功能。 极其灵活的数据展示图库 (效果图) 开始使用 Live charts 是 .Net 的跨平台图表库,请访问 https://livecharts.dev 并查看目标平…...

疯狂学英语

我上本科的时候&#xff0c;学校出国留学的气氛不浓厚&#xff0c;我们班只有一名同学有出国留学的倾向&#xff0c;我们宿舍八个人没有一个考虑过留学。 只有小昊&#xff0c;在本校上了研究生之后&#xff0c;不知道受到什么影响&#xff0c;想出国留学。那时候小昊利用一切…...

LeetCode //C - 93. Restore IP Addresses

93. Restore IP Addresses A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, bu…...

【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;由于C语言没有栈的接口&#xff0c;所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了&#xff08;可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口&#xff09;&…...

【联邦学习——手动搭建简易联邦学习】

1. 目的 用于记录自己在手写联邦学习相关实验时碰到的一些问题&#xff0c;方便自己进行回顾。 2. 代码 2.1 本地模型计算梯度更新 # 比较训练前后的参数变化 def compare_weights(new_model, old_model):weight_updates {}for layer_name, params in new_model.state_dic…...

Springboot项目如何创建单元测试

文章目录 目录 文章目录 前言 一、SpringBoot单元测试的使用 1.1 引入依赖 1.2 创建单元测试类 二、Spring Boot使用Mockito进行单元测试 2.1 Mockito中经常使用的注解以及注解的作用 2.2 使用Mockito测试类中的方法 2.3 使用Mockito测试Controller层的方法 2.4 mock…...

Win10 如何同时保留两个CUDA版本并自由切换使用

环境&#xff1a; Win10 专业版 CUDA11.3 CUDA11.8 问题描述&#xff1a; Win10 如何同时保留两个CUDA版本并自由切换 解决方案&#xff1a; 在同一台计算机上安装两个CUDA版本并进行切换可以通过一些环境配置来实现。这通常涉及到管理环境变量&#xff0c;特别是PATH和L…...

patat性能优化技巧:让终端演示更加流畅的7个方法

patat性能优化技巧&#xff1a;让终端演示更加流畅的7个方法 【免费下载链接】patat Terminal-based presentations using Pandoc 项目地址: https://gitcode.com/gh_mirrors/pa/patat patat是一个基于终端的演示工具&#xff0c;它利用Pandoc的强大功能在ANSI终端中呈现…...

Python flask django框架的社区残障人士服务平台的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块设计用户管理模块服务匹配模块无障碍交互模块社区支持模块数据安全与后台管理技术实现要点Flask/Django选型对比数据库设计关键API示例&#xff08;Django&#xff09;无障碍前端适配部署与扩展项目技术支持源码获取详细视频…...

个人财务助手:OpenClaw+千问3.5-35B-A3B-FP8自动解析银行卡账单

个人财务助手&#xff1a;OpenClaw千问3.5-35B-A3B-FP8自动解析银行卡账单 1. 为什么需要本地化财务助手&#xff1f; 每次收到银行发来的PDF账单&#xff0c;我都会陷入手动整理数据的痛苦循环&#xff1a;复制交易记录到Excel、手动分类支出类型、用公式计算各类占比……这…...

保姆级教程:在CentOS 7/8上配置auditd审计规则,监控关键文件访问与用户行为

保姆级教程&#xff1a;在CentOS 7/8上配置auditd审计规则&#xff0c;监控关键文件访问与用户行为 当你管理一台暴露在公网的服务器时&#xff0c;是否经常担心敏感文件被非法访问&#xff1f;或者怀疑某些用户进行了越权操作&#xff1f;Linux内核自带的auditd审计系统就是为…...

TlbbGmTool:提升天龙八部单机版管理效率的5个核心解决方案

TlbbGmTool&#xff1a;提升天龙八部单机版管理效率的5个核心解决方案 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 一、价值定位&#xff1a;重新定义游戏管理工具的核心优势 1.1 三大独特价值优…...

Windows 11 LTSC微软商店安装高效解决方案:从问题到实施的完整指南

Windows 11 LTSC微软商店安装高效解决方案&#xff1a;从问题到实施的完整指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 LTSC&#…...

互联网创业者的AI助手:用Nanbeige 4.1-3B快速生成产品文案与市场分析

互联网创业者的AI助手&#xff1a;用Nanbeige 4.1-3B快速生成产品文案与市场分析 你是不是也遇到过这种情况&#xff1f;产品功能已经开发得七七八八&#xff0c;但产品介绍文档还是一片空白&#xff1b;明天就要发新品预热微博&#xff0c;文案却憋了一下午只写出个标题&…...

CAT使用教程

CAT&#xff08;Cisco Auditing Tool&#xff09;是一款专门用于审计Cisco网络设备安全性的工具&#xff0c;主要功能是对Cisco路由器、交换机等设备进行弱口令检测和漏洞扫描。其核心作用是帮助网络安全人员识别Cisco设备中存在的安全隐患&#xff0c;如默认或弱社区字符串&am…...

手把手教你用FireRed-OCR:5步搞定复杂文档精准解析

手把手教你用FireRed-OCR&#xff1a;5步搞定复杂文档精准解析 1. 为什么选择FireRed-OCR&#xff1f; 在日常工作和学习中&#xff0c;我们经常遇到需要从PDF、扫描件或图片中提取文字和表格的情况。传统OCR工具面对复杂排版时往往力不从心&#xff0c;而FireRed-OCR Engine…...

Go的runtime.LockOSThread:将goroutine绑定到系统线程

Go语言以其轻量级的goroutine和高效的并发模型著称&#xff0c;但在某些特殊场景下&#xff0c;开发者需要更精细地控制goroutine与系统线程的绑定关系。这时&#xff0c;runtime.LockOSThread便成为了一个关键工具。本文将深入探讨这一机制&#xff0c;帮助读者理解其原理、应…...