栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring使用redis遇到的问题及解决方案

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring使用redis遇到的问题及解决方案

本人在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();
    Map tempMap = 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初始化以后将值放入其中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/134539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号