一、集成 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,它默认按照名字装配