最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Spring使用redis遇到的问题及解决方法
时间:2020-04-08 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下Spring使用redis遇到的问题及解决方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、配置文件
classpath*:config.properties
注:可以看到redis的配置中,对于hash的key使用的是StringRedisSerializer序列化,而对于value使用的是GenericJackson2JsonRedisSerializer序列化。
二、坑一
// 源代码 HashOperations ho = redisTemplate.opsForHash(); Boolean flag = ho.hasKey(“key”, "key1"); if (flag) { // 处理逻辑 }
上面这段代码,当redis中值不存在时,按照官方的说明文档,应该返回false。但是使用的时候,hasKey方法时而返回的是null,时而返回的false,导致空指针异常。搞了半天也没搞明白为啥返回false,没办法最后妥协了。
// 妥协后代码 HashOperations ho = redisTemplate.opsForHash(); Boolean flag = ho.hasKey(“key”, "key1"); if (flag != null && flag) { // 处理逻辑 }
三、坑二
// 将Map放到redis的hash中 public void putRedisHash1(){ HashOperations ho = redisTemplate.opsForHash(); MaptempMap = new HashMap (3){{ put("isRegistered",false); put("isWeChat",false); put("isAliPay",false); }}; ho.put("key", "key1", tempMap); } // 将Map放到redis的hash中 public void putRedisHash2(){ HashOperations ho = redisTemplate.opsForHash(); Map tempMap = new HashMap (3); tempMap.put("isRegistered",false); tempMap.put("isWeChat",false); tempMap.put("isAliPay",false); ho.put("key", "key1", tempMap); }
这两个方法的功能是一样的,但是第一个方法是在Map初始化同时将值放入其中,第二个方法是Map初始化以后将值放入其中,执行结果是一样,但是在redis中的存储形式完全不同。由于Hash的value使用的是GenericJackson2JsonRedisSerializer序列化,所以为了反序列化方便,它会存储
@class“”这个字段,由于Map初始化时机不同,导致相同内容在redis中@class内容不一致,为了使用方便,推荐第二种,即在Map初始化以后将值放入其中。
相关文章
- SpringBoot自定义bean绑定解析 10-24
- Javaweb工程运行报错HTTP Status 404解决教程 10-20
- JAVA获取jvm和操作系统相关信息方法 10-20
- BeanFactory和FactoryBean的区别讲解 10-20
- 微信小程序的宿主环境实现教程 10-10
- dispatchEvent解决重叠元素响应事件教程 10-10