StringRedisTemplate和RedisTemplate的区别

news/2024/11/8 3:36:28/

StringRedisTemplate和RedisTemplate的区别

springboot提供了两种redis访问工具类StringRedisTemplate和RedisTemplate,为什么spring官方会提供两种不同redis访问工具呢?两者主要的的区别在于redis的key和value的序列化方式不同,并且StringRedisTemplate继承RedisTemplate并修改其序列化方式。

RedisTemplate默认使用JdkSerializationRedisSerializer序列化对象,序列化成byte[]
StringRedisTemplate默认使用StringRedisSerializer序列化对象,序列化成String

Spring提供了几种redis序列化方式有:
  • GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
  • Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的
  • JacksonJsonRedisSerializer: 序列化object对象为json字符串
  • JdkSerializationRedisSerializer: 序列化java对象
  • StringRedisSerializer: 简单的字符串序列化
性能比较
  • JdkSerializationRedisSerializer序列化后长度最小,Jackson2JsonRedisSerializer效率最高。
  • 如果综合考虑效率和可读性,牺牲部分空间,推荐key使用StringRedisSerializer,保持的key简明易读;value可以使用Jackson2JsonRedisSerializer
  • 如果空间比较敏感,效率要求不高,推荐key使用StringRedisSerializer,保持的key简明易读;value可以使用JdkSerializationRedisSerializer

一、StringRedisTemplate

StringRedisTemplate主要用于存储字符串,会redis的key和value都序列化成String字符串存储到redis中。
在这里插入图片描述

二、RedisTemplate

RedisTemplate可以存储对象,默认使用JdkSerializationRedisSerializer序列化对象,序列化成byte[],导致数据没有可读性。
在这里插入图片描述
可以看出,在redis查询工具里是16进制数据或者是乱码的无法查看。

三、自定义序列化

针对RedisTemplate进行自定义序列化规则,redis中key使用StringRedisSerializer进行序列化、value则使用FastJsonRedisSerializer进行序列化。

@Configuration
public class RedisConfig {@Bean(name = "redisTemplate")public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);// 建议使用这种方式,小范围指定白名单ParserConfig.getGlobalInstance().addAccept("com.xxxxx.");// 设置键(key)的序列化采用StringRedisSerializer。redisTemplate.setKeySerializer(new org.springframework.data.redis.serializer.StringRedisSerializer());redisTemplate.setHashKeySerializer(new org.springframework.data.redis.serializer.StringRedisSerializer());// 设置值(value)的序列化采用FastJsonRedisSerializer。redisTemplate.setValueSerializer(fastJsonRedisSerializer);redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);return redisTemplate;}
}

注意:在存储字符串的时候,StringRedisSerializer则会默认去掉字符串两边的引号,而FastJsonRedisSerializer则两遍引号不会去掉。
如下所示

redisTemplate.opsForSet().add("ownStringRedisSerializer","234234234");
stringRedisTemplate.opsForSet().add("ownStringRedisSerializer","23423");

在这里插入图片描述


http://www.ppmy.cn/news/85228.html

相关文章

hive 按照某字段聚类在排序,添加编号

使用row_number&#xff08;&#xff09;函数 数据样例 /* 数据样例 --------------------------------------- id |num --------------------------------------- 1 |12 2 |8 1 |29 2 |7 1 |10 --…

Unsupervised Visual Representation Learning by Context Prediction(2015

2015年 仅给定一个大的、未标记的图像集合&#xff0c;我们从每个图像中提取随机的片对&#xff0c;并训练卷积神经网络来预测第二个片相对于第一个片的位置。我们认为&#xff0c;要做好这项工作&#xff0c;需要模型学会识别物体及其组成部分。我们证明了使用这种图像内上下文…

程序员职业病之中医颈椎痛缓解办法

✨求关注~ &#x1f600;博客&#xff1a;www.protaos.com 治疗颈椎病的穴位按摩是一种传统中医疗法&#xff0c;可以缓解颈椎病引起的疼痛和不适。下面是关于五个常用穴位的介绍、取穴定位、按摩方法和功效主治的总结&#xff1a; 人体穴位图 穴位图 1. 揉捏风池穴&#xf…

pandas 遇到Key Error错误的一个小问题

最近刚刚接触Python&#xff0c;安装了Anaconda&#xff0c; 编程小白一个&#xff0c;照着教程准备做一个中考成绩录取分数线分析的案例&#xff0c; 使用read_excel()读入数据后&#xff0c; import pandas as pd data pd.read_excel(rC:\2021-2022深圳中考录取分数线(1).xl…

React组件通信

目录 组件通信的意义 结构准备 通过Props通信 父子通信 父传子 子传父 兄弟组件通信 第三方库的消息订阅与发布 父传子 兄弟传 组件通信的意义 1&#xff09; 组件是独立且封闭的单元&#xff0c;默认情况下组件只能使用自己的数据&#xff08;state&#xff09; 2&…

ChatGPT在语音识别技术领域的应用

第一章&#xff1a;引言 近年来&#xff0c;随着深度学习技术的飞速发展&#xff0c;语音识别技术已经成为了人工智能领域中备受关注的重要领域之一。在语音识别技术的应用中&#xff0c;ChatGPT作为一款先进的语言模型&#xff0c;可以发挥其强大的文本生成和自然语言处理能力…

【ONE·C++ || 哈希(二)】

总言 主要介绍哈希运用于unordered系列的上层封装框架与相关运用&#xff1a;位图、布隆过滤器、哈希切割。 文章目录 总言0、思维导图3、封装3.1、基础封装3.1.1、框架结构3.1.2、Inset 1.0 3.2、引入迭代器3.2.1、在迭代器中3.2.2、在哈希表中3.2.3、在unordered上层3.2.4、…

文本转语音怎么转?教你三招轻松搞定

近年来&#xff0c;人工智能技术飞速发展&#xff0c;语音合成技术 (TTS) 已经被广泛应用于各种应用场景中。在日常生活中&#xff0c;人们经常需要阅读长篇文章、新闻报道、科技论文等&#xff0c;但传统的阅读方式不仅效率低下&#xff0c;而且容易让人感到疲劳。随着语音合成…