当前位置: 首页 > 编程笔记 >

springboot整合spring-data-redis遇到的坑

丁钟展
2023-03-14
本文向大家介绍springboot整合spring-data-redis遇到的坑,包括了springboot整合spring-data-redis遇到的坑的使用技巧和注意事项,需要的朋友参考一下

描述

使用springboot整合redis,使用默认的序列化配置,然后使用redis-client去查询时查询不到相应的key.

使用工具发现,key的前面多了\xAC\xED\x00\x05t\x00!这样一个串.

而且value也是不能直观可见的.

问题所在

使用springdataredis,默认情况下是使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializer这个类来做序列化.

org.springframework.data.redis.core.RedisTemplate代码块.

 public void afterPropertiesSet() {
    super.afterPropertiesSet();
    boolean defaultUsed = false;
    if (defaultSerializer == null) {
      defaultSerializer = new JdkSerializationRedisSerializer(
          classLoader != null ? classLoader : this.getClass().getClassLoader());
    }
    if (enableDefaultSerializer) {
      if (keySerializer == null) {
        keySerializer = defaultSerializer;
        defaultUsed = true;
      }
      if (valueSerializer == null) {
        valueSerializer = defaultSerializer;
        defaultUsed = true;
      }
      if (hashKeySerializer == null) {
        hashKeySerializer = defaultSerializer;
        defaultUsed = true;
      }
      if (hashValueSerializer == null) {
        hashValueSerializer = defaultSerializer;
        defaultUsed = true;
      }
    }
    if (enableDefaultSerializer && defaultUsed) {
      Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized");
    }
    if (scriptExecutor == null) {
      this.scriptExecutor = new DefaultScriptExecutor<K>(this);
    }
    initialized = true;
  }

解决

手动设置key的序列化方式为StringRedisSerializer,强制使用.

由于spring不支持泛型注入,这样会导致所有的redisTemplate的key序列方式都为StringRedisSerializer. 同时,最好在序列化对象保存时候手动将其转为json串后存入redis.易于在可视化工具中直接查看对应value

@Bean
  public RedisTemplate<String, ?> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(factory);
    RedisSerializer<String> stringRedisSerializer = new StringRedisSerializer();//Long类型不可以会出现异常信息;
    redisTemplate.setKeySerializer(stringRedisSerializer);
    return redisTemplate;
  }

以上所述是小编给大家介绍的springboot整合spring-data-redis遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍详解java之redis篇(spring-data-redis整合),包括了详解java之redis篇(spring-data-redis整合)的使用技巧和注意事项,需要的朋友参考一下 1,利用spring-data-redis整合 项目使用的pom.xml: 除了log部分,只有一个spring core 和 spring-data-redis了 项目文件目录结构: applica

  • 本文向大家介绍SpringBoot整合Redis的步骤,包括了SpringBoot整合Redis的步骤的使用技巧和注意事项,需要的朋友参考一下 1.添加配置文件: Redis.properties 设置配置类: RedisConfig 2.将对象转化为Json格式入门案例 API: MAPPER.writeValueAsString(itemDesc); 3.将对象转化为Json格式格式优化 4.

  • 本文向大家介绍SpringBoot 整合Redis 数据库的方法,包括了SpringBoot 整合Redis 数据库的方法的使用技巧和注意事项,需要的朋友参考一下 Redis简介 Redis(官网: https://redis.io )是一个基于内存的日志型可持久化的缓存数据库,保存形式为key-value格式,Redis完全免费开源,它使用ANSI C语言编写。与其他的key - value缓存

  • 本文向大家介绍springboot与redis的简单整合实例,包括了springboot与redis的简单整合实例的使用技巧和注意事项,需要的朋友参考一下 前言 Redis是一个缓存、消息代理和功能丰富的键值存储。StringBoot提供了基本的自动配置。本文记录一下springboot与redis的简单整合实例 官方文档:https://docs.spring.io/spring-boot/do

  • 本文向大家介绍SpringBoot整合Lettuce redis过程解析,包括了SpringBoot整合Lettuce redis过程解析的使用技巧和注意事项,需要的朋友参考一下 首先解释一下Lettuce客户端: Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedi

  • 本文向大家介绍springboot整合Mybatis、JPA、Redis的示例代码,包括了springboot整合Mybatis、JPA、Redis的示例代码的使用技巧和注意事项,需要的朋友参考一下 引言 在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便。下面我们分别整合mysql ,spring data jpa 以及redis 。让我们感受下快车道。 我们首先创建一