Spring Boot整合Redis——自定义RedisSerializer

引言

spring boot简单引入redis依赖,并使用RedisTemplate进行对象存储时,需要使存储对象实现Serializable接口,这样才能够成功将对象进行序列化。

RedisTemplate默认使用的序列化机制是JdkSerializationRedisSerializer,但实际开发中,往往会以json的形式来保存数据。那么可以通过两种方式来实现这种要求,第一就是将保存的对象通过一些方法先转换成JsonString的形式,然后再通过redis保存;第二种方式,就是今天将要总结的自定义RedisSerializer的方式。

Jackson2JsonRedisSerializer

如果你使用IDE如Eclipse使用Ctrl + T 查看RedisSerializer的实现类,就可以看到很多可供选择的序列化器:

因此,根据项目实际使用场景,可以尝试选择不同的序列化器,这里也可以看到,StringRedisSerializer是专门用于序列化字符串的,以及刚才提到的jdk序列化器,还有阿里的FastJsonRedisSerializer等等。

这里我选择Jackson2JsonRedisSerializer举例演示。

@Configuration
public class RedisConfig {@Beanpublic RedisCacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);cacheManager.setUsePrefix(true);return cacheManager;}@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory)throws UnknownHostException {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setKeySerializer(new StringRedisSerializer());template.setConnectionFactory(factory);// 自定义Jackson2JsonRedisSerializerJackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);//        ObjectMapper om = new ObjectMapper();
//        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//        serializer.setObjectMapper(om);template.setValueSerializer(serializer);template.afterPropertiesSet();return template;}}

测试自定义序列化

注入redisTemplate:

@Autowired
private RedisTemplate<String, Object> redisTemplate;

存储对象关键代码:

ValueOperations<String, Object> opsForValue = redisTemplate.opsForValue();
String key = "emp-01";
opsForValue.set("emp-01", new Emp("张红玉", 23));

观察redis中的数据:

其中Object是一个没有实现Serializer接口的员工类,可以看到redis中依然成功保存了这个json对象。 

 综上,就是关于自定义序列化器的简单配置,欢迎文末留言。

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

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

相关文章

LeetCode算法入门- Implement strStr() -day22

LeetCode算法入门- Implement strStr() -day22 题目描述 Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. Example 1: Input: haystack “hello”, needle “ll” Output: 2 Example …

交易系统如何确保账簿100%准确

转自廖雪峰老师的《交易系统如何确保账簿100%准确》 这篇文章阐述了一个交易系统中对账功能的关键&#xff0c;即&#xff1a;时刻保证资产负债表总额始终为 0。 交易系统中&#xff0c;对账是一个大问题。对账处理不好&#xff0c;不但需要花费大量的人力去处理账簿&#xff…

通俗易懂的SpringBoot教程---day1---Springboot入门教程介绍

通俗易懂的SpringBoot教程—day1—教程介绍 教程介绍&#xff1a; 初级教程&#xff1a; 一、 Spring Boot入门 二、 Spring Boot配置 三、 Spring Boot与日志 四、 Spring Boot与Web开发 五、 Spring Boot与Docker&#xff1a;Docker容器 六、 Spring Boot与数据访问&#x…

重装win11 23H2系统步骤及错误总结

1.分出大约13GB 的启动盘&#xff0c;下载win11 mul映像并解压进去 &#xff08;记得下载电脑相应的网卡驱动&#xff01;&#xff08;只要等下进入桌面要用&#xff09;&#xff09; 2.利用easybcd&#xff0c; 到add选项&#xff0c;点击Win1PE&#xff0c;命名启动项&…

Java 8中获取参数名称

本文转自廖雪峰老师的&#xff1a;《在Java 8中获取参数名称》 在Java 8之前的版本&#xff0c;代码编译为class文件后&#xff0c;方法参数的类型是固定的&#xff0c;但参数名称却丢失了&#xff0c;这和动态语言严重依赖参数名称形成了鲜明对比。现在&#xff0c;Java 8开始…

通俗易懂的SpringBoot教程---day2---Springboot配置文件

通俗易懂的SpringBoot教程—day2—Springboot配置文件 1、配置文件 SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1b; •application.properties •application.yml 配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;Spring…

英语中数字表达总结

引言 对于英语中千、万、亿的表达法&#xff0c;始终是我英语路上的一个痛点&#xff0c;今天就来好好总结一下这东西的规律。 一句话总结 阅读和理解层面&#xff08;99%的使用情况&#xff09;&#xff1a;thousand后面跟 3 个 0 &#xff0c;million后面跟 6 个 0 &#…

Kibana 的安装(Windows版本)新手入门

Kibana 的安装&#xff08;Windows版本&#xff09;新手入门 参考博文&#xff1a;https://blog.csdn.net/weixin_34727238/article/details/81200071 目录 什么是Kibana? Kibana 6.3.1安装条件 JDK的安装 node的安装 Elasticsearch的安装 Kibana 的安装 什么是Kibana?…

价值50万年薪的Java面试题

《Java面试题全集&#xff08;上&#xff09;》 《Java面试题全集&#xff08;中&#xff09;》 《Java面试题全集&#xff08;下&#xff09;》 《关于Java并发编程的总结和思考》 《面试编程题拾遗&#xff08;01&#xff09; --- 不用算术运算符完成两个数求和》 《面试…

Could not resolve host: 'localhost 报错解决办法

Could not resolve host: localhost 报错解决办法 面向Windows的&#xff1a; 零基础的我一直卡在这一步骤下&#xff1a; 首先要先在Windows安装curl&#xff1a;安装方式参考&#xff1a;https://blog.csdn.net/weixin_41986096/article/details/86646365 按照完之后&…

当面试官问我————为什么String是final的?

面试官&#xff1a;你好&#xff0c;能看得清下面这张图吗&#xff1f; 我&#xff1a;可以的。 面试官&#xff1a;恩&#xff0c;好的。呃&#xff0c;你能不能说一说为什么String要用final修饰&#xff1f; 我&#xff1a;final意味着不能被继承或者被重写&#xff0c;Str…

当面试官问我————Java是值传递还是引用传递?

面试官&#xff1a;你好&#xff0c;你能说出下面个程序的执行结果吗&#xff1f; public class Test {public static void main(String[] args) {String name "Scott";int age 5;User user new User();user.setName(name);user.setAge(age);System.out.println(…

ubuntu系统下Jenkins和tomcat的安装与配置

ubuntu 安装 JDK ubuntu的安装我们采取最简单的方式安装 直接用apt-get的方式 sudo apt-get install openjdk-8-jdk 安装器会提示你同意 oracle 的服务条款,选择 ok 然后选择yes 即可 ubuntu 安装tomcat8 通过apt安装 tomcat8 sudo apt-get install tomcat8 tomcat8-docs t…

String字符串拼接小例

>>>写出下面程序运行结果&#xff1a; public class StringTest {public static void main(String[] args) {String s1 "Programming";String a "Program";String b "ming";String s2 "Program" "ming";Stri…

看完这篇文章,还不懂nginx,算我输

看完这篇文章&#xff0c;还不懂nginx&#xff0c;算我输 参考&#xff1a;https://mp.weixin.qq.com/s/PeNWaCDf_6gp2fCQa0Gvng 1. Nginx产生~ Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格&#xff0c;以统一资源描述符&#xff08;Uniform Resources Id…

Java并发编程实战————Executor框架与任务执行

引言 本篇博客介绍通过“执行任务”的机制来设计应用程序时需要掌握的一些知识。所有的内容均提炼自《Java并发编程实战》中第六章的内容。 大多数并发应用程序都是围绕“任务执行”来构造的&#xff1a;任务通常是一些抽象的且离散的工作单元。 当围绕“任务执行”来设计应…

一篇博客读懂设计模式之---工厂模式

设计模式之—工厂模式 工厂模式&#xff1a; 创建过程&#xff1a; 创建Shape接口 public interface Shape {void draw(); }创建实现类&#xff1a; public class Circle implements Shape {Overridepublic void draw() {System.out.println("this is a circle!"…

强健程序员体魄————减脂原理

一、基本概念 运动消耗&#xff1a;任何肌肉活动。 热量摄入&#xff1a;指人体从外界食物中获得的总的能量。 基础代谢&#xff1a;人体维持生命的所有器官所需要的最低能量需要。与人的年龄、性别、体型&#xff08;肌肉量&#xff09;、气温有关。简单说&#xff0c;一个…

一篇博客读懂设计模式之-----策略模式

设计模式之策略模式 在策略模式中&#xff0c;我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决&#xff1a;在有多种算法相似的情况下&#xff0c;使用 if…else 所带来的复杂和…

Java并发编程实战————恢复中断

中断是一种协作机制&#xff0c;一个线程不能强制其他线程停止正在执行的操作而去执行其他操作。 什么是中断状态&#xff1f; 线程类有一个描述自身是否被中断了的boolean类型的状态&#xff0c;可以通过调用 .isInterrupted() 方法来查看。官方解释如下&#xff1a; 简单来…