springboot3.2 RedisCacheManager配置
1、启用并配置
添加 @EnableCaching 注解
并配置 RedisCacheManager
package config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.io.Serializable;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Properties;@Configuration
@EnableCaching
public class RedisConfigure implements WebMvcConfigurer {/*** redis 序列化* 否则redis会出现乱码或序列化失败*/@Beanpublic RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer = defaultTypeSerializer();redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}/*** 设置缓存管理器*/@Beanpublic RedisCacheManager getRedisCacheManager(RedisConnectionFactory factory) {RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()//变双冒号为单冒号,和redisTemplate约定一致.computePrefixWith(name -> name + ":").entryTtl(Duration.ofDays(7)).disableCachingNullValues().serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(defaultTypeSerializer()));return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).transactionAware().build();}/*** 自动转换的Jackson2JsonRedisSerializer*/Jackson2JsonRedisSerializer<Object> defaultTypeSerializer() {// 1、配置 ObjectMapperObjectMapper objectMapper = JsonMapper.builder().visibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY).activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY)// 反序列化时对字段名的大小写不敏感.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)// 默认使用 类上的注解来指导序列化和反序列化.enable(MapperFeature.USE_ANNOTATIONS)// 不存在的字段时,不会抛出异常.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)// 当找不解析类型(含子类),不会抛异常,继续尝试反序列化.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false)// 忽略序列化和反序列化的大小写.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)// 当找不到类型,会序列化成空对象.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false).build(); // 创建ObjectMapper实例;// 2.1 定义自定义的日期时间格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 2.2 创建模块并注册自定义的序列化器和反序列化器SimpleModule module = new SimpleModule();module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter));module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));// 2.3 注册模块到 ObjectMapperobjectMapper.registerModule(module);// 3 Jackson2JsonRedisSerializerreturn new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);}}
2 简单的使用
package service.impl;import java.util.List;/*** <p>* 服务实现类* </p>** @author fisec* @since 2024-04-24*/
@Service
public class IpWhitelistServiceImpl extends ServiceImpl<IpWhitelistMapper, IpWhitelist> implements IIpWhitelistService {//key 可选,一般是getId ,list一般量少使用@Override@Cacheable(value = RedisKeyConstants.IP_WHITE_LIST, key = "")public List<IpWhitelist> getWhitelist() {return this.list();}@Override@CacheEvict(value = RedisKeyConstants.IP_WHITE_LIST, allEntries = true)public void add(IpWhitelist ipWhitelist) {...}@Override@CacheEvict(value = RedisKeyConstants.IP_WHITE_LIST, allEntries = true)public void delete(Long id) {...}
}相关文章:
springboot3.2 RedisCacheManager配置
1、启用并配置 添加 EnableCaching 注解 并配置 RedisCacheManager package config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import c…...
IP地址与MAC地址区别
MAC地址和IP地址是现代计算机网络中两个非常重要的概念,它们各自承担着不同的角色和功能。 MAC地址(Media Access Control Address) 一种物理地址,它是烧录在网卡或接口上的,具有全球唯一性,一般不能被改…...
Linux chmod 命令简介
在Linux中,chmod 命令用于改变文件或文件夹的访问权限。要改变一个文件夹及其内部所有文件和子文件夹的权限,您可以使用递归选项 -R。以下是一些常用的 chmod 命令示例: 给所有用户读、写和执行权限: chmod -R 777 /path/to/direc…...
【LeetCode】删除排序链表中的重复元素 II
目录 一、题目二、解法完整代码 一、题目 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 …...
Pandas使用 `iloc` 和 `loc` 常见用法汇总
文章目录 df.iloc 常见用法1. 获取特定行2. 获取特定列3. 获取特定的行和列4. 获取行切片5. 获取列切片6. 获取特定的行和列切片 df.loc 常见用法1. 获取特定行2. 获取特定列3. 获取特定的行和列4. 获取行切片5. 获取列切片6. 获取特定的行和列切片 示例代码 df.iloc 和 df.lo…...
【linux服务器】大语言模型实战教程:LLMS大模型快速部署到个人服务器
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 说到大语言模型相信大家都不会陌生,大型语言模型(LLMs)是人工智能文本处理的主要类型,也现在最流行的人工智能…...
Windows 32 汇编笔记(二):使用 MASM
一、Win32 汇编源程序的结构 ; Hello.asm ; 使用 Win32 ASM 写的 Hello, world 程序 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>…...
手机和电脑通过TCP传输(一)
一.工具 手机端:网络调试精灵 电脑端:野火网络调试助手 在开始通信之前,千万要查看一下电脑的防火墙是否关闭,否则可能会无法通信 在开始通信之前,千万要查看一下电脑的防火墙是否关闭,否则可能会无法通信…...
Sentinel规则持久化Push模式两种实现方式
文章目录 sentinel持久化push推模式微服务端的实现具体实现源码分析读数据源写数据源的实现 微服务端解析读数据源流程 修改源码的实现官方demo修改源码实现配置类flowauthoritydegreadparamsystemgateway修改源码 测试补充 前置知识 pull模式 sentinel持久化push推模式 pull拉…...
Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解
1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…...
Hadoop3:MR程序压测实验
一、环境要求 内存:128G CPU:32C 磁盘:8T 注:一个虚拟机不超过150G磁盘尽量不要执行这段代码 二、案例 1、需求 使用Sort程序评测MapReduce 2、操作步骤 1、使用RandomWriter来产生随机数,每个节点运行10个Map任…...
初学者如何通过建立个人博客盈利
建立个人博客不仅能让你在网上表达自己,还能与他人建立联系。通过博客,可以创建自己的空间,分享想法和故事,并与有相似兴趣和经历的人交流。 本文将向你展示如何通过建立个人博客来实现盈利。你将学习如何选择博客主题、挑选合适…...
构建稳健性:如何在Gradle中配置构建失败时的行为
构建稳健性:如何在Gradle中配置构建失败时的行为 在软件开发过程中,构建失败是不可避免的。然而,如何优雅地处理构建失败并从中恢复,是提高开发效率和软件质量的关键。Gradle,作为一款强大的构建工具,提供…...
大语言模型-基础及拓展应用
一、基础模型 1、Transformer 2、bert 3、gpt 二、大语言模型 三、句子向量 四、文档解析 1、通用解析 2、docx解析 3、 pdf解析 4、pptx解析 五、向量数据库...
STM32使用Wifi连接阿里云
目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下,如何使用阿里云物联网平台,创建一个简单的远程控制小灯示例。 完整工程&a…...
2024.7.16日 最新版 docker cuda container tookit下载!
nvidia官方指导 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 其实就是这几个命令,但是有墙: curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/shar…...
打印室预约小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,附近打印店管理,文件打印管理,当前预约管理,预约历史管理,打印记录管理 开发系统:Windows 架构模式:SSM JD…...
Android音视频—OpenGL 与OpenGL ES简述,渲染视频到界面基本流程
文章目录 OpenGL 简述特点和功能主要组件OpenGL ES当前状态 OpenGL ES 在 Android 上进行视频帧渲染总体流程 OpenGL 简述 OpenGL(Open Graphics Library)是一个跨平台的、语言无关的应用程序编程接口(API),用于开发生…...
Vscode中Github copilot插件无法使用(出现感叹号)解决方案
1、击扩展或ctrl shift x 2、搜索查询或翻找到Github compilot 3、点击插件并再左侧点击登录github 点击Sign up for a ... 4、跳转至github登录页,输入令牌完成登陆后返回VScode 5、插件可以正常使用...
Spring-cloud-openfeign-@FeignClient中的configuration属性
FeignClient注解中的configuration属性就是设置相关配置,但是这个属性写的非常的不好,而且在它的注释中也没有写全,所以本文记录一下,当我们的代码如下时: FeignClient(name "xxx", configuration Abc.cl…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
