RedisTemplate和StringRedisTemplate的区别:

  1. 两者的关系是StringRedisTemplate继承RedisTemplate。
  2. 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
  3. SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存入Redis数据库,这个时候打开Redis查看的时候,你会看到你的数据不是以可读的形式展现的,而是以字节数组显示,类似下面

当然从Redis获取数据的时候也会默认将数据当做字节数组转化,这样就会导致一个问题,当需要获取的数据不是以字节数组存在redis当中而是正常的可读的字符串的时候,比如说下面这种形式的数据

注:使用的软件是RedisDesktopManager

RedisTemplate就无法获取导数据,这个时候获取到的值就是NULL。这个时候StringRedisTempate就派上了用场。

当Redis当中的数据值是以可读的形式显示出来的时候,只能使用StringRedisTemplate才能获取到里面的数据。

所以当你使用RedisTemplate获取不到数据的时候请检查一下是不是Redis里面的数据是可读形式而非字节数组

另外我在测试的时候即使把StringRedisTemplate的序列化类修改成RedisTemplate的JdkSerializationRedisSerializer

最后还是无法获取被序列化的对象数据,即使是没有转化为对象的字节数组,代码如下

@Test
public void testRedisSerializer(){
User u = new User();
u.setName("java");
u.setSex("male");
redisTemplate.opsForHash().put("user:","1",u);
/查看redisTemplate 的Serializer/
System.out.println(redisTemplate.getKeySerializer());
System.out.println(redisTemplate.getValueSerializer());

/*查看StringRedisTemplate 的Serializer*/
System.out.println(stringRedisTemplate.getValueSerializer());
System.out.println(stringRedisTemplate.getValueSerializer());  /*将stringRedisTemplate序列化类设置成RedisTemplate的序列化类*/
stringRedisTemplate.setKeySerializer(new JdkSerializationRedisSerializer());
stringRedisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());  /*即使在更换stringRedisTemplate的的Serializer和redisTemplate一致的
* JdkSerializationRedisSerializer
* 最后还是无法从redis中获取序列化的数据
* */
System.out.println(stringRedisTemplate.getValueSerializer());
System.out.println(stringRedisTemplate.getValueSerializer());  User user = (User)  redisTemplate.opsForHash().get("user:","1");
User  user2 = (User) stringRedisTemplate.opsForHash().get("user:","1");
System.out.println("dsd");  

}

Debug结果

总结:

当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可,但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

原文链接:https://blog.csdn.net/yifanSJ/article/details/79513179

转载于:https://www.cnblogs.com/guoyinghome/p/11344888.html

RedisTemplate和StringRedisTemplate的区别相关推荐

  1. redistemplate hash 过期时间_redisTemplate的使用以及和stringRedisTemplate的区别

    这两个类StringRedisTemplate和RedisTemplate,这两个类是springboot-data-redis对Redis进行操作的实现类. RedisTemplate是泛型类,而在 ...

  2. springboot系列——redisTemplate和stringRedisTemplate对比、redisTemplate几种序列化方式比较

    文章目录 一.redisTemplate和stringRedisTemplate对比 1.StringRedisTemplate 2.RedisTemplate 二.redisTemplate序列化方 ...

  3. Redis的Java客户端——SpringDataRedis、RedisTemplate、StringRedisTemplate

    目录 一.初步了解SpringDataRedis 1.1 特点: 二.快速入门SpringDataRedis 2.1  引入依赖 2.2 配置文件 2.3 注入RedisTemplate 2.4 编写 ...

  4. RedisTemplate和StringRedisTemplate使用

    From: https://blog.csdn.net/qiesheng/article/details/83897634 //向redis里存入数据和设置缓存时间 stringRedisTempla ...

  5. SpringBoot整合Redis 之 StringRedisTemplate、RedisTemplate 基础

    SpringBoot 整合 Redis 环境准备 引入依赖 配置文件 StringRedisTemplate 基本使用 Key 常用操作 String 常用操作 List 常用操作 Set 常用操作 ...

  6. Redis学习笔记——SpringDataRedis的使用

    与Spring集成 我需要哪些jar包? <dependency><groupId>org.springframework.data</groupId><ar ...

  7. 全新Redis6全部知识点,零基础入门

    文章目录 1.分布式缓存Redis6安装 1.1.缓存和队列简介 1.2.本地缓存和分布式缓存介绍 1.3.Nosql和Redis简介 1.4.Linux源码安装Redis6 1.5.Docker容器 ...

  8. springboot整合redis实现消息队列

    在java中直接使用redis的时候,直接使用简单的两个指令lpush和rpop或者rpush和lpop就可以实现消息队列的操作.当与spring结合时,可以使用RedisTemplate和Strin ...

  9. 【檀越剑指大厂--redis】redis高阶篇

    一.数据结构与对象 1.什么是 SDS? Redis 没有直接使用 C 语言传统的字符吕表示 (以空字符结尾的字符数组,以下简称 C 字符串),而是自己构建了 一种名为简单动态字符串(simple d ...

最新文章

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
  2. win10 1709电脑无法显示局域网共享
  3. 将excel转为python的字典_python读取excel表并把数据转存为字典
  4. spark学习-76-目标:如何成为大数据Spark高手
  5. Windows Server 2008 R2 install Visual Studio 2015 failed
  6. oracle ssl jdbc 架构,我与数据库的JDBC连接是否使用SSL?
  7. 上传文件应注意的异常:FileUpLoad控件.
  8. python与anaconda安装
  9. 解决Rational Rose找不到suite objects.dll文件的问题
  10. iozone联机测试
  11. Halcon 阈值算子汇总
  12. Python扫码登录保存和验证cookies值——微视篇(三)
  13. 【币圈止损】正确认知,合理运用
  14. 【财经期刊FM-Radio|2021年03月13日】
  15. 用python独立制作Doip刷写ECU工具
  16. java 工具的开发及应用
  17. 【软件之道】亿图9.3 显示的内容与导出成图片后的内容不一致
  18. easyUI datagrid 控制列隐藏和显示
  19. 王春亮阿育吠陀推拿心学
  20. 哪些PCB缺陷适合用X-ray检测技术?

热门文章

  1. 机器学习实战——决策树:matplotlib绘图
  2. 输入三科成绩 C语言,C语言题,对我的程序找错修改。输入10个学生学号,三科成绩,求总成绩和平均分,并按成绩由高到低输出...
  3. linux shell 获取用户名,shell脚本输出/etc/passwd中shell类型对应的用户名及其个数
  4. Keras及其前端配置
  5. Java多态形式_Java多态
  6. Installing SuiteSparse
  7. Disable Auto Detect Keyboard Layout in Win10
  8. Tensorboard可视化具体做法
  9. [图像处理]指定任意灰度变换
  10. php滑动轮播效果,js实现移动端手指滑动轮播图效果