Spring Boot集成Redis注意事项

一、集成 Redis

Spring集成Redis有两种方式

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

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

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

二、Redis的序列化模板

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

 

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

所以需要自定义序列化

@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,它默认按照名字装配

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值