当前位置: 首页 > news >正文

RedisTemplate序列化

SpringBoot整合Redis,配置RedisTemplate序列化。如果使用StringRedisTemplate,那么不需要配置序列化,但是StringRedisTemplate只能存储简单的String类型数据,如图:


如果使用StringRedisTemplate存储一个常规对象,只能转换成JSON字符串存储,取出后再把JSON字符串转成需要的对象,比较麻烦,所以一般使用RedisTemplate。

一、RedisTemplate配置使用

使用RedisTemplate之前一般需要配置序列化方式,这里以单节点Redis为例:

1、添加maven依赖

        <!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>


2、添加配置

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** Redis配置*/
@Slf4j
@Configuration
public class RedisConfig {/*** 实例化 RedisTemplate 对象* 设置序列化方式* 默认序列化为:JdkSerializationRedisSerializer* JdkSerializationRedisSerializer       占用空间小,序列化速度慢,客户端可读性差* GenericJackson2JsonRedisSerializer    占用空间大,序列化速度快,客户端可读性好** @return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {log.info("redisTemplate init. serializer=GenericJackson2JsonRedisSerializer");RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// 设置 key 的序列化器 StringRedisSerializerredisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);// 设置 value 的序列化器 GenericJackson2JsonRedisSerializerGenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);redisTemplate.setConnectionFactory(factory);return redisTemplate;}


3、使用
 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;/*** Redis常用方法*/
@Component
public class RedisCache {/*** 1分钟,单位:秒*/private static final long ONE_MINUTE = 60;@Autowiredprivate RedisTemplate redisTemplate;/*** 存储* @param key   唯一键* @param value     值* @param expireTime    过期时间,单位:秒* @param <T>*/public <T> void set(String key, T value, long expireTime) {redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.SECONDS);}/*** 查询* @param key   唯一键* @param <T>* @return*/public <T> T get(String key) {return (T) redisTemplate.opsForValue().get(key);}

4.总结

RedisTemplate默认使用的是JDK 序列化方式(JdkSerializationRedisSerializer) ,这种序列化方式可以不用在配置类里配置,默认即可,这种不推荐使用,这种方式对应客户端来说可读性差,不利于人工排查问题。

所以一般用JSON序列化,JSON序列化方式又有两种,GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializer,GenericJackson2JsonRedisSerializer配置更简单方便些。

对比一下JDK 序列化和JSON序列化的可读性,如图:

JDK 序列化:

JSON序列化:

相关文章:

  • 预编译仓库中的 Helm Chart
  • Embedding模型在大语言模型中的重要性
  • 数据库-期末考前复习-第3章-关系数据库标准语言SQL
  • 数据库-期末考前复习-第1章-绪论
  • 再薅!Pika全球开放使用;字节版GPTs免费不限量;大模型应用知识地图;MoE深度好文;2024年AIGC发展轨迹;李飞飞最新自传 | ShowMeAI日报
  • SQL BETWEEN 操作符
  • 在Linux运行LaTeX
  • Python虚拟环境virtualenv手册
  • 计算机网络(第八版)期末复习(第四章网络层)
  • leetcode每日一题41
  • C语言——格式说明符前面加修饰符
  • Python算法例33 删除数字
  • 陈述式资源管理(2)
  • 动画墙纸:将视频、网页、游戏、模拟器变成windows墙纸——Lively Wallpaper
  • 阿里云2核2G3M服务器上传速度多少?下载速度快吗?
  • Bootstrap JS插件Alert源码分析
  • JavaScript实现分页效果
  • js递归,无限分级树形折叠菜单
  • text-decoration与color属性
  • 程序员该如何有效的找工作?
  • 对超线程几个不同角度的解释
  • 关于Java中分层中遇到的一些问题
  • 好的网址,关于.net 4.0 ,vs 2010
  • 开源SQL-on-Hadoop系统一览
  • 算法-图和图算法
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • linux 淘宝开源监控工具tsar
  • 阿里云服务器购买完整流程
  • 阿里云重庆大学大数据训练营落地分享
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #AngularJS#$sce.trustAsResourceUrl
  • (3)选择元素——(17)练习(Exercises)
  • (day6) 319. 灯泡开关
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)JAVA使用POI操作excel
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十五)使用Nexus创建Maven私服
  • (转)VC++中ondraw在什么时候调用的
  • (转)甲方乙方——赵民谈找工作
  • (转)视频码率,帧率和分辨率的联系与区别
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • . NET自动找可写目录
  • .bat批处理出现中文乱码的情况
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net流程开发平台的一些难点(1)
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [asp.net core]project.json(2)
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ2850]巧克力王国
  • [C++] 统计程序耗时