解决RedisTemplate配置JSON序列化后@Cacheable序列化仍然是JDK序列化的问题
问题现象
在参考网上的Redis集成后,配置了RedisTemplate的序列化,配置成功后@Cacheable注解的缓存仍然是jdk的序列化,配置无效。
参考配置的类似代码:
@Bean("redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);var jackson2JsonRedisSerializer = getJackson2JsonRedisSerializer();// 设置value的序列化规则和key的序列化规则redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
public static GenericJackson2JsonRedisSerializer getJackson2JsonRedisSerializer() {var jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();jackson2JsonRedisSerializer.configure(objectMapper -> {// add java8 time moduleobjectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.activateDefaultTyping(new LaissezFaireSubTypeValidator(),ObjectMapper.DefaultTyping.EVERYTHING);JavaTimeModule javaTimeModule = new JavaTimeModule();objectMapper.registerModule(javaTimeModule);});return jackson2JsonRedisSerializer;}
问题原因
@Cacheable未使用RedisTemplate,所以操作无效。他使用的是CacheManager
问题解决
配置CacheManager即可。
我们可以使用 RedisCacheManagerBuilderCustomizer
来自定义CacheManager
public class MyRedisCacheManagerBuilderSerialCustomizer implements RedisCacheManagerBuilderCustomizer {@Overridepublic void customize(RedisCacheManager.RedisCacheManagerBuilder builder) {RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();var jackson2JsonRedisSerializer = getJackson2JsonRedisSerializer();var configuration = builder.cacheDefaults().serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));builder.cacheDefaults(configuration);var configuredCaches = builder.getConfiguredCaches();// 针对有的缓存存在自定义配置的情况,读取所有缓存的配置,设置序列化方法for (String configuredCache : configuredCaches) {var cacheConfig = builder.getCacheConfigurationFor(configuredCache);cacheConfig.ifPresent(config -> {var newConfig = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));builder.withCacheConfiguration(configuredCache, newConfig);});}}
}
相关文章:
解决RedisTemplate配置JSON序列化后@Cacheable序列化仍然是JDK序列化的问题
问题现象 在参考网上的Redis集成后,配置了RedisTemplate的序列化,配置成功后Cacheable注解的缓存仍然是jdk的序列化,配置无效。 参考配置的类似代码: Bean("redisTemplate") public RedisTemplate<Object, Objec…...
人脸检测+调整分辨率+调整帧率
初始检测:只在视频的前几秒内进行一次人脸检测,以确定主持人的大致位置。计算裁剪框:基于检测到的主持人位置,计算一个以主持人面部为中心的固定裁剪框。视频裁剪:使用计算出的裁剪框对整个视频进行裁剪,将…...

C++相关概念和易错语法(19)(继承规则、继承下的构造和析构、函数隐藏)
1.继承规则 继承的本质是复用,是结构上的继承而不是内容上的继承,近似于在子类中声明了父类的成员变量。 (1)写法:class student : public person 派生类(子类),继承方式&…...
使用GPT-4和ChatGPT构建应用项目
文章目录 项目1:构建新闻稿生成器项目2:YouTube视频摘要项目3:打造《塞尔达传说:旷野之息》专家项目4:语音控制项目1:构建新闻稿生成器 GPT-4和ChatGPT等LLM专用于生成文本。我们可以使用GPT-4和ChatGPT在各种场景中生成文本,举例如下。 电子邮件合同或正式文档创意写作…...

mobx学习笔记
mobx介绍 mobx是一个功能强大,上手容易的状态管理工具。MobX背后的哲学很简单:任何源自应用状态的东西都应该自动地获得。利用getter和setter来收集组件的数据依赖关系,从而在数据发生变化的时候精确知道哪些组件需要重绘。 mobx和redux的区别 mobx更…...
深入理解 Cowboy WebSocket:使用 Erlang/OTP 构建高效的即时通讯(IM)应用
深入理解 Cowboy WebSocket:使用 Erlang/OTP 构建高效的即时通讯(IM)应用 引言 实时通信技术在现代 Web 应用中扮演着核心角色,而 WebSocket 作为其中的关键技术,已成为即时通讯(IM)系统不可或缺的一部分。Cowboy,这个基于 Erla…...

算法的几种常见形式
算法(Algorithm) 算法(Algorithm)是指解决问题或完成任务的一系列明确的步骤或规则。在计算机科学中,算法是程序的核心部分,它定义了如何执行特定的任务或解决特定的问题。算法可以用多种方式来表示和实现…...

SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。
我的教程都是亲自测试可行才发布的,如果有任何问题欢迎留言或者来群里我每天都会解答。 我们要如何选择MySql 目前主流的Mysql有5.0、8.0、9.0 主要区别 MySQL 5.0 发布年份:2005年特性: 基础事务支持存储过程、触发器、视图基础存储引擎…...

Elasticsearch 更新指定字段
Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch更新指定字段语句,下面开始写更新语句执行更新啦! 查询数据 查…...
Koa.js、Egg.js与Express.js:探析三大Node.js框架的异同
在Node.js的世界里,选择合适的框架对于构建高效、可维护的后端服务至关重要。Express.js、Koa.js 和 Egg.js 是三个备受欢迎的框架,它们各有特色,适用于不同的开发场景。本文旨在深入探讨这三个框架的区别,并通过代码示例帮助开发…...

【MYSQL】如何解决 bin log 与 redo log 的一致性问题
该问题问的其实就是redo log 的两阶段提交 为什么说redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(crash-safe),需要借助 InnoDB 引擎的 redo log 才能拥有崩溃恢复的能力。所谓崩…...

翻译语音识别在线的软件,分享4款实用的软件!
在全球化日益加速的今天,语言沟通已成为人们生活中不可或缺的一部分。无论是商务洽谈、学术交流还是日常交流,翻译语音识别技术都扮演着举足轻重的角色。今天,我们就来揭秘一下,那些能让你在语言沟通中如虎添翼的翻译语音识别软件…...
Qt 的Q_PROPERTY关键字
Qt 的Q_PROPERTY关键字 1. Q_PROPERTY 的由来2. 实现原理3. Q_PROPERTY 的特点4. Q_PROPERTY 的属性5. 应用说明示例代码示例代码连接信号和槽的多种方式处理信号和槽的注意事项 QT的元对象系统1. 元对象系统的由来2. 实现原理3. 元对象系统的特点4. 元对象系统的属性5. 应用说…...
github 下载提速的几种方法
1. 代理下载(无需注册) //toolwa.com/github/ //d.serctl.com/2. 转入 Gitee 加速 将项目镜像到 Gitee 中下载加速 3. 使用 Watt Toolkit 加速 Watt Toolkit //steampp.net/选择合适的版本下载 选择 github,一键加速 4.CDN 加速 (修改…...

【Oracle】实验三 Oracle数据库的创建和管理
【实验目的】 掌握Oracle数据库的创建方法使用DBCA创建数据库在数据库中装入SCOTT用户及其表 【实验内容】 使用DBCA创建数据库,名为MYDB,找到其初始化文件(文本型和服务器型文件都要找到),查看各类默认位置并记录下来(包括物理文件所在目…...
Linux rpm和ssh损坏修复
背景介绍 我遇到的问题可能和你的不一样。但是如果遇到错误一样也可以按此方案尝试修复。 我是想在Linux上安装Oracle,因为必须在离线环境下安装。就在网上搜一篇文章linux离线安装oracle,然后安装教程走,进行到安装oracle依赖包的时候执行了…...

仕考网:公务员考试面试时间一般多长?
公务员考试主要分为笔试与面试两个阶段,其中面试是笔试通过的下一关,面试的具体安排通常由相关考试机构或招录单位负责发布并通知考生。 公务员面试的持续时间一般在30分钟至1小时之间,具体时长可能因地区和招录单位的不同而有所变化。常见的…...

C语言作业5(学生管理系统C语言)
成学生管理系统 1> 使用菜单完成 2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入 3> 查看学生信息:输出所有学生姓名以及对应的分数 4> 求出学习最好的学生信息:求最大值 5> 按姓名将所有学…...

OS Copilot:新手测评体验
文章目录 前言一、OS Copilot(阿里云操作系统智能助手)简介二、测评体验总结OS Copilot 产品体验评测OS Copilot 产品功能反馈 前言 本文简单分享一下自己使用OS Copilot测评体验。 一、OS Copilot(阿里云操作系统智能助手)简介 …...

PS 2024【最新】中文白嫖版!,安装教程,图文步骤
文章目录 软件介绍软件下载安装步骤 软件介绍 Photoshop,简称“PS” Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...