首先说说问题,

在springboot中使用RedisTemplate操作redis时候,通过redis工具发现存入redis的数据的键为空

,如下图:

点击空的键,弹出错误提示:不能打开值的标签,不能加载key,因为它(key)不存在数据库中,请重新加载连接,如图:

通过黑窗口查看redis中的键,发现存储在redis中的key不是设置的string值,前面还多出了许多类似\xac\xed\x00\x05t\x00

操作redis的代码如下:

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Autowiredprivate RedisTemplate redisTemplate;@Overridepublic List<User> findAll() {// 首先判断缓存中是否有数据 List<User> users = (List<User>) redisTemplate.boundValueOps("jae:springboot:user:id:1").get();if (users==null) {System.out.println("load from db");// 从数据库中查询users = userMapper.findAll();// 放入缓存redisTemplate.boundValueOps("jae:springboot:user:id:1").set(users);}else {System.out.println("load from redis");}
/*// 方便即存即删redisTemplate.delete("jae:springboot:user:id:1");
*/return users;}
}

spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化,如下

 private boolean enableDefaultSerializer = true;private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();private RedisSerializer keySerializer = null;private RedisSerializer valueSerializer = null;private RedisSerializer hashKeySerializer = null;private RedisSerializer hashValueSerializer = null;

解决办法:在代码中,将RedisTemplate 注入改成如下代码

private RedisTemplate redisTemplate;@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {RedisSerializer stringSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringSerializer);redisTemplate.setValueSerializer(stringSerializer);redisTemplate.setHashKeySerializer(stringSerializer);redisTemplate.setHashValueSerializer(stringSerializer);this.redisTemplate = redisTemplate;
}
一般到这里问题差不多可以解决了,但是我是存对象的集合,运行的时候报了一个类型转换异常,list不能转string,因此我将存入redis的user对象toString,问题得到解决。

优化redis操作:

  • 如果你的pojo没有重写toString方法,这时候redis中存的值为对象的地址值,如果需要在redis中展示结果(非地址值),pojo重写toString即可
  • 可以给存入redis的数据设置过期时间,即使我们在redis中看不见对应的数据,无法删除,但是我们还是可以通过redis的过期时间自动清除记录,下面示例为 设置过期时间是1小时
 redisTemplate.boundValueOps("jae:springboot:user:id:1").set(users.toString(),1, TimeUnit.HOURS);

springboot中使用RedisTemplate操作redis遇到的问题相关推荐

  1. Spring中使用RedisTemplate操作Redis(spring-data-redis)

    Redis 数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集合 ...

  2. spring-data-redis 中使用RedisTemplate操作Redis

    Redis 数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集合 ...

  3. java jredis hset_SpringBoot中 集成 redisTemplate 对 Redis 的操作(四)HSet

    SpringBoot中 集成 redisTemplate 对 Redis 的操作(四)HSet redis 数据结构中,set用于去重,hset 则用于 去重加排序.在hset 中,有两个概念: 1⃣ ...

  4. SpringBoot中注入RedisTemplate泛型异常

    SpringBoot中注入RedisTemplate泛型异常 报错如下: org.springframework.beans.factory.UnsatisfiedDependencyExceptio ...

  5. java jedis使用_Java中使用Jedis操作Redis

    Java中使用Jedis操作Redis 使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0 ...

  6. java中使用lua操作redis

    java中使用lua脚本参见我的上一篇文章 lua基础 本篇简单说下java中使用lua操作redis的示例,如下: 先引入jedis <dependency><groupId> ...

  7. RedisTemplate操作redis时,key值出现\xac\xed\x00\x05t\x00前缀

    现象: 使用redistemplate操作redis,随后在客户端keys * 查询,发现key值多了前缀,但是不影响程序读写 经查阅资料,是RedisTemplate默认序列化方式用的是JdkSer ...

  8. RedisTemplate操作redis五大类型用法详解(springboot整合redis版本)

    1.案例说明 springboot整合redis之后,提供了操作redis的简便方式 通过通用对象redisTemplate方式操作String,Hash,List,Set SortSet五大数据类型 ...

  9. 【过程记录】springboot整合redis/分别用redisRepository和redistemplate操作redis

    导入依赖 基本配置 使用RedisTemplate访问redis 使用Redisrepository访问redis 实例: 导入依赖 菜单大部分情况下不会出现变化,我们可以将其放入Redis 加快加载 ...

最新文章

  1. Java-集合的简单介绍
  2. Linux文件夹含义
  3. 程序员这口饭-职业规划解决方案
  4. c语言结构体单元测试,C语言结构体单元练习.doc
  5. RN子组件获取redux数据
  6. 南京航空航天大学2020数据结构课设
  7. 金山云笔试题:AKM函数
  8. 2022-2028全球记账软件行业调研及趋势分析报告
  9. 法语语法学习笔记——代词(1)
  10. 了解DPDK——内核NIC接口
  11. sfgghshs测试测试
  12. [译]尤雨溪: Ref语法糖提案
  13. 苹果真伪查询_苹果自研M1芯片Mac电脑开启预售!该不该冲?
  14. 【COCOS2DX-游戏开发之七】添加启动数字输入法的功能
  15. ASP.NET CORE的服务注册方法
  16. 喜讯 | 人大金仓荣获行业信息化领航企业奖
  17. VSCode配置Python开发环境!
  18. 8 9区别 endnote7_带鱼5-7和8-9的区别
  19. 防止 “黑天鹅”事件需态势感知 态势感知又如何实现?
  20. Linux软件安装—软件包管理—rpm命令管理—包名与依赖性

热门文章

  1. Eclipse集成Groovy插件
  2. SAP Business One和SAP All-in-One
  3. SAP移动类型103解析
  4. ALV一个百度文库的例子
  5. 数字时代企业内部如何高效协作?这款工具值得一试
  6. 上半年营收超阿迪,相当于2.2个李宁,安踏凭什么?
  7. 抖音:我“弱”我有理
  8. JAVA关于父亲节的代码_关于父亲节的经典语录
  9. java内部类的定义_java定义内部类
  10. c语言switch自动贩卖机,JAVA程式-自动贩卖机SWITCHCASE.doc