Spring Boot集成Redis注意事项

一、集成 Redis

Spring集成Redis有两种方式

  • 基于 RedisTemplate 类,直接注入使用。
  • 基于 Jedis,Jedis 是 Redis 官方推荐的面向 JAVA 的客户端。

第一种方式Spring提供的客户端有两种:Lettuce和Jedis

Spring Boot 在 2.X 以上版本使用Lettuce 客户端

二、Redis的序列化模板

序列化模板需要自己编写使用默认的模板会造成key值保存为二进制

 

通过阅读源码可以看到 JdkSerializationRedisSerializer 会将数据转义

所以需要自定义序列化

扫描二维码关注公众号,回复: 14717095 查看本文章
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

反思:

Spring 提供的 RedisTemplate

@ConditionalOnMissingBean(name = {"redisTemplate"})

当name里面的bean不存在才会生效,意味着我们可以自己实现;

三、 封装Redis工具类

@Component
public class RedisUtil {

    @Resource
    private RedisTemplate<String,Object> redisTemplate;

    public void delete(String key){
        if (Boolean.TRUE.equals(redisTemplate.hasKey(key))){
            redisTemplate.delete(key);
        }
    }
}

自己写的工具类常遇报错

1、org.springframework.data.redis.core.RedisTemplate' that could not be found

解决办法

1、注入时不指定K、V的类型

@Autowired

private RedisTemplate redisTemplate;

2、使用@Resource

@Resource

private RedisTemplate<String, Object> redisTemplate;

注意:变量名字一定要是 redisTemplate

RedisTemplate< String, Object>注入时用到了@Autowired,@Autowired默认按照类型装配的。也就是说,想要获取RedisTemplate< String, Object>的Bean,要根据名字装配。那么自然想到使用@Resource,它默认按照名字装配

猜你喜欢

转载自blog.csdn.net/qq_35930739/article/details/124697942