一、Redis客户端介绍
分布式缓存Redis客户端有自带客户端 redis-cli、可视化工具、语言客户端:java、python。
在 Java 语言环境中,常用的 Redis 客户端实现有 Jedis 和 Lettuce。这两个库都允许开发者通过 Java 代码高效地操作 Redis 数据库。
在SpringBoot整合Redis很简单,只需要添加依赖 spring-boot-starter-data-redis,并且Springboot2后默认使用Lettuce作为访问redis的客户端。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、RedisTemplate介绍及配置序列化机制
在SpringBoot项目中操作redis少不了RedisTemplate。
RedisTemplate介绍:
- ValueOperations:简单K-V操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:list类型的数据操作
RedisTemplate和StringRedisTemplate的区别
-
StringRedisTemplate继承RedisTemplate
-
两者的数据是不共通的(默认的序列化机制导致key不一样)
-
StringRedisTemplate默认采用的是String的序列化策略
-
RedisTemplate默认采用的是JDK的序列化策略,会将数据先序列化成字节数组然后在存入Redis数据库
由于不同的序列化机制导致key不一样,所以我们需要在项目中配置序列化机制。
@Configuration
public class RedisTemplateConfiguration {
/**
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置key和value的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置hashKey和hashValue的序列化规则
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
// 设置支持事物
//redisTemplate.setEnableTransactionSupport(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}