Asuka直接使用spring-boot-redis作为缓存依赖,通过其封装好的RedisTemplate和StringRedisTemplate对Redis缓存进行管理,不再单独封装一套RedisUtil,因为RedisTemplate已经足够具备易用性,对于了解Redis的原生方法亦有所帮助。
依赖与配置
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application-dev.yml
spring:
redis:
# Redis 服务器ip
host: 192.168.31.178
# Redis 端口
port: 6379
# Redis 数据库索引(默认为 0)
database: 0
# Redis 服务器连接密码(默认为空)
password:
RedisConfig ```java @Configuration public class RedisConfig {
@Bean public RedisTemplate
redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
RedisSerializer<?> redisSerializer = new StringRedisSerializer();
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
template.setKeySerializer(redisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(redisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
<a name="HZye8"></a>
## RedisTemplate方法简介<br />
RedisTemplate对Redis的5种数据结构进行了高度封装,统一返回operation接口,如下所示:
- 操作字符串:`redisTemplate.opsForValue()`
- 操作 Hash:`redisTemplate.opsForHash()`
- 操作 List:`redisTemplate.opsForList()`
- 操作 Set:`redisTemplate.opsForSet()`
- 操作 ZSet:`redisTemplate.opsForZSet()`
对于String类型的数据,又提供了StringRedisTemplate,两者的区别主要在于:
1. RedisTemplate是一个泛型类,可以操作任何类型,而StringRedisTemplate的键和值都必须是String类型
1. 两者数据不共通,无法获取对方管理的缓存数据
<a name="8qtRC"></a>
## 实战演示
在需要使用缓存的service、component或controller中注入RedisTemplate,然后调用redisTemplate的各种ops方法,如下所示:
```java
@Autowired
private RedisTemplate<String, Object> redisTemplate;
redisTemplate.opsForList().leftPush("cache:demo", loginRecord);
更新计划
- 支持Memcache、GuavaCache等多种缓存
- 提供slf4j类似的缓存切面,根据依赖和配置自动选择缓存