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) {...}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础笔记(面试题)

一、Tomcat中为什么要使用自定义类加载器 Tomcat中可以放多个Java项目的jar文件&#xff0c;如果每个jar文件中都有一个User的类&#xff0c;那么User类在没有自定义类加载器的情况下是只能加载一次&#xff1b;想要加载多次&#xff0c;只能自定义类加载器 二、JDK、JRE、JVM…

项目管理进阶之RACI矩阵

前言 项目管理进阶系列续新篇。 RACI&#xff1f;这个是什么矩阵&#xff0c;有什么用途&#xff1f; 在项目管理过程中&#xff0c;如Team规模超5以上时&#xff0c;则有必要采用科学的管理方式&#xff0c;满足工作需要。否则可能事倍功半。 Q&#xff1a;什么是RACI矩阵 …

【简单介绍Gitea】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【Rust】使用日志记录利器flexi_logger

Flexi_logger简介 ​flexi_logger​是一个功能强大且灵活的日志记录库&#xff0c;用于Rust语言的应用程序。它提供了丰富的配置选项和功能&#xff0c;适用于各种日志记录需求&#xff0c;从简单的控制台输出到复杂的文件日志管理。以下是对flexi_logger​的一些关键功能和特…

观察者模式-C#

在C#中实现观察者模式&#xff0c;通常涉及两个主要的组件&#xff1a;主题&#xff08;Subject&#xff09;和观察者&#xff08;Observer&#xff09;。主题负责维护观察者列表&#xff0c;并在其状态发生变化时通知所有注册的观察者。观察者则是对主题状态感兴趣的对象&…

吴恩达大模型系列课程《Prompt Compression and Query Optimization》中文学习打开方式

Prompt Compression and Query Optimization GPT-4o详细中文注释的Colab观看视频1 浏览器下载插件2 打开官方视频 GPT-4o详细中文注释的Colab 中文注释链接&#xff1a;https://github.com/Czi24/Awesome-MLLM-LLM-Colab/tree/master/Courses/Prompt-Compression-and-Query-Op…

防溺水预警系统引领水域安全新篇章

一、系统概述 随着人们对水域活动的需求增加&#xff0c;溺水事故频发&#xff0c;给人们的生命安全带来了严重威胁。然而&#xff0c;如今&#xff0c;一项创新科技正在以强大的功能和无限的潜力引领着水域安全的新篇章。智能防溺水预警系统&#xff0c;作为一种集成了智能感知…

乐鑫ESP-IoT-Bridge方案简化设备智能联网通信,启明云端乐鑫代理商

随着物联网技术的快速发展&#xff0c;设备联网已成为实现智能化的关键一步。然而&#xff0c;不同设备之间的通信协议、接口等差异&#xff0c;使得设备联网变得复杂且困难。 乐鑫推出的ESP-IoT-Bridge联网方案&#xff0c;正是为了解决这一难题&#xff0c;为物联网场景下的…

c字符串转go字符串

【1】问题&#xff1a;如何将带中文的char*转utf8 【2】问题分析&#xff1a; 默认的带中文的char*的编码格式是GBK&#xff0c;也就是中文是占两个字节&#xff0c;而数字、字母和其他字符是占一个字节&#xff0c;如“hao好”就是占5个字节 但是UTF-8&#xff0c;汉字是占…

抖音短视频seo矩阵系统源码(搭建技术开发分享)

#抖音矩阵系统源码开发 #短视频矩阵系统源码开发 #短视频seo源码开发 一、 抖音短视频seo矩阵系统源码开发&#xff0c;需要掌握以下技术&#xff1a; 网络编程&#xff1a;能够使用Python、Java或其他编程语言进行网络编程&#xff0c;比如使用爬虫技术从抖音平台获取数据。…

服务器的80和443端口关闭也能申请SSL证书

一、简介 在服务器的80和443端口关闭的情况下&#xff0c;确实可以申请SSL证书&#xff0c;但申请过程和方法会根据证书类型和验证方式的不同而有所差异。 通常如果是网站域名申请SSL证书&#xff0c;哪怕服务器的80、443端口都打不开&#xff0c;也可以通过DNS解析的方式来验…

设计模式-领域逻辑模式-领域模型(Domain Model)

例子 合并了行为和数据的领域的对象模型&#xff0c;如下图所示。 建立收入确认类 建立收入计算策略类 对象的传递过程

EasyExcel 学习之 导出 “WPS 表格在试图打开文件时遇到错误”

目录 1. 版本2. 现象2.1. Postman 文件下载成功且 WPS 可以正常打开2.2. VUE 下载成功但 WPS 无法打开 3. 原因:前端未指定 responseType4. 常见问题4.1. NoSuchMethodError4.1.1. org.apache.logging.log4j.LogBuilder org.apache.logging.log4j.Logger.atTrace()4.1.2. Could…

请解释vue的单页面应用是什么及其优缺点

Vue的单页面应用&#xff08;Single Page Application, SPA&#xff09;是一种使用Vue.js框架构建的Web应用程序&#xff0c;它通过动态加载内容来更新页面&#xff0c;而不是每次用户导航时重新加载整个页面。以下是对Vue单页面应用的详细解释及其优缺点的归纳&#xff1a; V…

河南萌新联赛2024第(一)场:河南农业大学

C-有大家喜欢的零食吗_河南萌新联赛2024第&#xff08;一&#xff09;场&#xff1a;河南农业大学 (nowcoder.com) 思路:匈牙利算法的板子题. 二部图 int n; vector<int> vct[505]; int match[505],vis[505]; bool dfs(int s){for(auto v:vct[s]){if(vis[v]) continue;…

Jmeter关联

案例脚本实现&#xff1a;选择商品加入购物车 客户端发送一个登录的HTTP请求&#xff0c;服务端返回一个带着token的响应&#xff0c;后续发出一个带token信息的加入购物车的HTTP请求&#xff0c;返回响应。 关联&#xff1a;当请求直接由依赖关系的时候&#xff0c;比如一个请…

Python项目中的.gitignore配置

在Git项目中&#xff0c;.gitignore 文件用于指定哪些文件和目录应该被Git忽略&#xff0c;不纳入版本控制。对于Python项目&#xff0c;通常需要忽略一些特定的文件和目录&#xff0c;如编译生成的文件、虚拟环境、日志文件等。以下是一个常见的Python项目 .gitignore 配置示例…

FreeRTOS的中断管理、临界资源保护、任务调度

什么是中断&#xff1f; 简介&#xff1a;让CPU打断正常运行的程序&#xff0c;转而去处理紧急的事件&#xff08;程序&#xff09;&#xff0c;就叫中断。 中断优先级分组设置 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级&#xff0c;这个寄存器就是中断优先级…

Python | Leetcode Python题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; class Solution:def isAnagram(self, s: str, t: str) -> bool:s_c Counter(s)t_c Counter(t)if(len(s_c) ! len(t_c)):return Falseelse:for key, value in s_c.items():if t_c.get(key) ! value:return Falsereturn True

使用Java和Apache Kafka Streams实现实时流处理应用

使用Java和Apache Kafka Streams实现实时流处理应用 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 实时流处理已经成为现代应用开发中不可或缺的一部分。Apache Kafka Streams是一个强大的库…