SpringBoot响应式RedisClient配置

大多数场景,默认配置的Redis客户端不满足业务场景,根源在于Redis key、value 序列化反序列化问题。因此,有必要配置自定义的客户端来满足需求。

默认配置源码如下,采用jdk序列化/反序列化方式进行,我们只需要配置相同的bean org.springframework.data.redis.core.ReactiveRedisTemplate即可覆盖默认:

1.引入依赖

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

2.配置文件配置(Redis基于sentinel搭建)

多个节点之间逗号分隔

spring:
  redis:
    password: your password
    timeout: 6000
    database: 1
    sentinel:
      master: mymaster
      nodes: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
      password: your password
    lettuce:
      pool:
        max-active: 10
        max-idle: 3
        max-wait: -1
        min-idle: 1

3.配置Java Config

@Bean
public ReactiveRedisTemplate<Object, Object> reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {
    // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
    // 解决查询缓存转换异常的问题
    Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper objectMapper = new ObjectMapper();

    // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
    objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    objectMapper.setTimeZone(TimeZone.getDefault());
    objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.LOWER_CAMEL_CASE);

    // 解决序列化/反序列化 LocalDateTime 问题
    objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    objectMapper.registerModule(new JavaTimeModule());

    // 确定遇到未知属性(未映射到属性,并且没有“任何setter”或处理程序可以处理它)是否会导致失败(通过抛出JsonMappingException)的功能。
    // 此设置仅在尝试了未知属性的所有其他处理方法后生效,并且属性保持未处理状态
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    serializer.setObjectMapper(objectMapper);

    RedisSerializationContext<Object, Object> serializationContext = RedisSerializationContext.newSerializationContext()
            .key(serializer)
            .hashKey(serializer)
            .value(serializer)
            .hashValue(serializer)
            .build();
    return new ReactiveRedisTemplate<>(factory, serializationContext);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中颖51芯片学习2. IO端口操作

一、SH79F9476 I/O端口介绍 1. 特性 SH79F9476提供了30/26位可编程双向 I/O 端口&#xff1b;端口数据在寄存器Px中&#xff1b;端口控制寄存器PxCRy是控制端口作为输入还是输出&#xff1b;端口作为输入时&#xff0c;每个I/O端口均带有PxPCRy控制的内部上拉电阻。有些I/O引…

软件测试(二)--测试用例

一、什么是用例: 用例就是用户使用案例的简称。以手机用例为例&#xff1a; 1.是否能开机&#xff1a;打开手机按下电源键3秒&#xff0c;看是否能开机。 2.验证内存&#xff1a;打开手机设置查看内存是否为64G. 3.验证屏幕&#xff1a;打开手机在白屏背景下检查屏幕是否有黑点…

【MySQL】数据操作语句(DML)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习计网、mysql和算法 ✈️专栏&#xff1a;MySQL学习 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

LeetCode 1017. 负二进制转换

解题思路 相关代码 class Solution {public String baseNeg2(int n) {if(n0) return "0";String s"";while(n!0)if(Math.abs(n)%20){nn/(-2);ss0;}else{ss1; n (n-1)/(-2);}String t reverse(s);return t;}public String reverse(String s){Str…

大广赛车机主体设计实践指南:必备技能速成攻略解读!

车机主体设计是什么 汽车作为代步工具距今已有 130 多年的历史。目前&#xff0c;在视觉范围内如此关注车载 HMI 的历史也只是近十年的事情&#xff0c;因为在过去&#xff0c;人们最注重的还是汽车技术的发展。但随着以交通安全为主的自动驾驶技术的不断发展&#xff0c;智能…

【nginx】使用nginx部署https协议

一、客户有证书提供 客户有证书的&#xff0c;或者有域名申请了免费证书的&#xff0c;直接根据下面的第5步骤&#xff0c;配置nginx即可。 二、 自己生成证书 1. 安装openssl-Win64 OpenSSL v3.1.1 Light 附下载地址 Win32/Win64 OpenSSL Installer for Windows - Shinin…

网站统计中的数据收集原理及实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理&#xf…

宏集PLC如何为楼宇自动化行业提供空调、供暖与通风的解决方案?

一、应用背景 楼宇自动化行业是通过将先进的技术和系统应用于建筑物中&#xff0c;以提高其运营效率、舒适度和能源利用效率的行业&#xff0c;其目标是使建筑物能够自动监控、调节和控制各种设备和系统&#xff0c;包括照明系统、空调系统、安全系统、通风系统、电力供应系统…

建模实例评点(2)领域类图-食谱

1 00:00:00,290 --> 00:00:04,120 这是之前我们给一个用户 2 00:00:04,130 --> 00:00:05,360 给他出食谱的 3 00:00:05,370 --> 00:00:06,480 这样做的一个 4 00:00:06,650 --> 00:00:08,000 你认为你系统最重要的 5 00:00:08,010 --> 00:00:09,360 一个核心…

计算机网络 实验指导 实验8

三层交换机的访问控制 1.实验拓扑图&#xff1a; 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1 2.实验目的…

支付宝会员签到领取积分

一、背景 跟一位喜欢薅羊毛的好友聊天&#xff0c;说现在好多app上的积分能兑换实物&#xff0c;就是需要每天自己去点开app签到&#xff0c;app太多签不过来或者有的时候会忘记签到&#xff0c;虽然流程不复杂&#xff0c;但要是有款工具每天自动签到就好了。 我给他介绍了一…

市场首款!华邦电子发布内置PQC算法的闪存产品

3月27日&#xff0c;全球领先的半导体内存解决方案供应商华邦电子股份有限公司推出TrustME Secure Flash W77Q系列的最新扩展&#xff0c;包括256Mb、512Mb和1Gb器件。 这些突破性的安全闪存设备是市场上首款针对后量子密码学&#xff08;PQC&#xff09;实施Leighton-Micali签…

nginx支持的多种负载均衡策略

目录 1.轮询&#xff08;默认&#xff09; 2. ip_hash 3. 加权轮询&#xff08;weight&#xff09; 4. fair&#xff08;第三方&#xff09; 5. 最少连接&#xff08;least_conn&#xff09; 1.轮询&#xff08;默认&#xff09; 将请求依次分配给每个服务器&#xff0c;确…

Linux:IO多路转接之poll

文章目录 select的缺点pollstruct pollfd解决缺点的方式 代码实现 本篇总结的是poll的相关内容&#xff0c;在总结poll的内容前&#xff0c;先回顾一下select的缺点 select的缺点 select的缺点也比较明显 等待的fd是有上限的&#xff0c;在我们当前这个版本来说&#xff0c;…

信号处理之(文件批处理+小波分解+波形图的生成)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前期准备工作之数据自动读取二、前期准备工作之信号分解&#xff08;小波分解&#xff09;三、前期准备工作之数据可视化&#xff08;波形图展示&#xff0…

Redis的配置文件详解

单位&#xff1a;Redis配置对大小写不敏感&#xff01; 注意这里&#xff1a;任何写法都可&#xff0c;不区分大小写。 units are case insensitive so 1GB 1Gb 1gB are all the same.包含&#xff1a;搭建Redis集群时&#xff0c;可以使用includes包含其他配置文件网络&…

个推助力小米汽车APP实现智能用户触达,打造智能出行新体验

4月3日&#xff0c;小米SU7首批交付仪式在北京亦庄的小米汽车工厂总装车间举行&#xff0c;全国28城交付中心也同步开启首批交付。随着小米SU7系列汽车的正式发售和交付&#xff0c;小米汽车APP迎来了用户体量的爆发式增长。 小米汽车APP是小米汽车官方推出的手机应用&#xff…

大型语言模型(LLMs)面试常见问题解析

概述 这篇文章[1]是关于大型语言模型&#xff08;LLMs&#xff09;的面试问题和答案&#xff0c;旨在帮助读者准备相关职位的面试。 token&#xff1f; 在大型语言模型中&#xff0c;token 指的是什么&#xff1f; 分词&#xff08;Tokenization&#xff09;&#xff1a;可以将…

力扣热题100_链表_138_随机链表的复制

文章目录 题目链接解题思路解题代码 题目链接 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&a…

事件时间+时间窗口,最后一个窗口不执行问题踩坑与源码分析

事件时间时间窗口&#xff0c;最后一个窗口不执行问题踩坑与源码分析 1. 结论 在使用事件时间和时间窗口的过程中&#xff0c;当最后一个事件的事件时间未达到时间窗口的最大时间&#xff0c;窗口不会触发。 举例说明&#xff0c;在按小时的滚动窗口中&#xff0c;假设当前时…