StringRedisTemplate和RedisTemplate区别和联

2024-01-06 11:08

本文主要是介绍StringRedisTemplate和RedisTemplate区别和联,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

总结了一下区别和联系主要有四点:

第一点,StringRedisTemplate继承了RedisTemplate。

第二点,RedisTemplate是一个泛型类,而StringRedisTemplate则不是。

第三点,StringRedisTemplate只能对key=String,value=String的键值对进行操作,RedisTemplate可以对任何类型的key-value键值对操作。

第四点,是他们各自序列化的方式不同,但最终都是得到了一个字节数组,殊途同归,StringRedisTemplate使用的是StringRedisSerializer类;RedisTemplate使用的是JdkSerializationRedisSerializer类。反序列化,则是一个得到String,一个得到Object

StringRedisTemplate

  • RedisTemplate
  1. 1

    首先要明白java序列化的概念,java序列化是指:将java对象通过某种方式转换成可以在网络中传输的字节数组。同样的反序列化是指:将字节数组转换成java对象。

    StringRedisTemplate和RedisTemplate区别和联系
  2. 2

    再来看这两个类StringRedisTemplate和RedisTemplate,这两个类是springboot-data-redis对Redis进行操作的实现类。

    打开StringRedisTemplate和RedisTemplate的源码,发现StringRedisTemplate继承了RedisTemplate,一般来说子类应该比父类有用更强大的功能,而此处却不是,因为RedisTemplate是泛型类,而在StringRedisTemplate继承RedisTemplate类时,则是指定了泛型的类型,两个String。

    这就直接导致了,StringRedisTemplate只能处理String-String的键值对数据,而RedisTemplate则可以处理任何类型的键值对。

    StringRedisTemplate和RedisTemplate区别和联系
    StringRedisTemplate和RedisTemplate区别和联系
  3. 3

    事实也是如此,比如我们在程序中注入StringRedisTemplate后,使用其set方法(template.opsForValue().set(String,String))存储一个实体对象时,则会报错,因为set方法的两个参数全是String。

    StringRedisTemplate和RedisTemplate区别和联系
  4. 4

    再来说说两者的序列化:StringRedisTemplate里面有一个无参构造方法,意思是重新创建一个RedisSerializer,即StringRedisSerializer。

    而RedisTemplate的序列化则是使用的JdkSerializationRedisSerializer。正如上面所说的,java数据要和redis数据库进行交互时,java程序正是通过这两个类实现的序列化和反序列化。

    StringRedisTemplate和RedisTemplate区别和联系
    StringRedisTemplate和RedisTemplate区别和联系
  5. 5

    我们再来看JdkSerializationRedisSerializer和StringRedisSerializer的实现,发现两者都有序列化和反序列化的方法,两者的不同点在于一个是对Object对象进行的序列化和反序列化,另一个是对String的序列化和反序列化。

    StringRedisSerializer设置了编码方式UTF-8,支持世界上所有的语言,是通过new String和getBytes实现的,这个不难理解,我们平时也会接触到,比如在文件的读写操作中。

    StringRedisTemplate和RedisTemplate区别和联系
  6. 6

    比较难理解的是JdkSerializationRedisSerializer。且看hasKey方法的调用过程,rawKey就是进行序列化的方法,一路向下找,

    最终调用的是JdkSerializationRedisSerializer.serialize,

    StringRedisTemplate和RedisTemplate区别和联系
    StringRedisTemplate和RedisTemplate区别和联系
  7. 7

    而JdkSerializationRedisSerializer又调用了SerializingConverter类的convert方法。在这个方法里其转换主要有三步:

    1、ByteArrayOutputStream(1024),创建一个字节数组输出流缓冲区。

    2、DefaultSerializer.serialize(source, byteStream):把要序列化的数据存储到缓冲区。还想看他是怎么放到缓冲区的,但是,能力有限,水平一般,serialize的细节,实在无能为力,看了半天,还是氐惆。

    3、toByteArray:就是把上一步放到缓冲区的数据拷贝到新建的字节数组里。

    至此Object的序列化就结束了,返回了一个字节数组。

    StringRedisTemplate和RedisTemplate区别和联系

这篇关于StringRedisTemplate和RedisTemplate区别和联的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576158

相关文章

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

关于Mybatis和JDBC的使用及区别

《关于Mybatis和JDBC的使用及区别》:本文主要介绍关于Mybatis和JDBC的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、JDBC1.1、流程1.2、优缺点2、MyBATis2.1、执行流程2.2、使用2.3、实现方式1、XML配置文件

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名