Spring Boot Redis 入门
Spring Boot Redis 入门
- 1.简介
- 1.1引入依赖
- 1.2配置文件
- 1.3简单测试
- 2.项目实践
- 2.1数据访问层
1.简介
对于下层,Spring Data Redis 提供了统一的操作模板,封装了 Jedis、Lettuce 的 API 操作,访问 Redis 数据。
所以,实际上,Spring Data Redis 内置真正访问的实际是 Jedis、Lettuce 等 API 操作。
本节我们是 Spring Data Redis + Jedis 的组合。
1.1引入依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><!-- 实现对 Spring Data Redis 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 去掉对 Lettuce 的依赖,因为 Spring Boot 优先使用 Lettuce 作为 Redis 客户端 --><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><!-- 引入 Jedis 的依赖,这样 Spring Boot 实现对 Jedis 的自动化配置 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><!-- 方便等会写单元测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Data Redis 默认使用 Jackson 作为 JSON 序列化的工具 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency></dependencies>
1.2配置文件
spring:# 对应 RedisProperties 类redis:host: 127.0.0.1port: 6379password: # Redis 服务器密码,默认为空。生产中,一定要设置 Redis 密码!database: 0 # Redis 数据库号,默认为 0 。timeout: 0 # Redis 连接超时时间,单位:毫秒。# 对应 RedisProperties.Jedis 内部类jedis:pool:max-active: 8 # 连接池最大连接数,默认为 8 。使用负数表示没有限制。max-idle: 8 # 默认连接数最小空闲的连接数,默认为 8 。使用负数表示没有限制。min-idle: 0 # 默认连接池最小空闲的连接数,默认为 0 。允许设置 0 和 正数。max-wait: -1 # 连接池最大阻塞等待时间,单位:毫秒。默认为 -1 ,表示不限制。
1.3简单测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test01 {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testpublic void testStringSetKey() {stringRedisTemplate.opsForValue().set("yunai", "shuai");}
}
我们先来执行下 #testStringSetKey() 方法这个测试方法。执行完成后,我们在控制台查询,看看是否真的执行成功了。
$ redis-cli get yunai
"shuai"
2.项目实践
在我们使用数据库时,我们会创建 dataobject 包,存放 DO(Data Object)数据库实体对象。
对于复杂的缓存对象,我们创建了 cacheobject 包
2.1数据访问层
@Repository
public class UserCacheDao {private static final String KEY_PATTERN = "user:%d"; // user:用户编号 <1>@Resource(name = "redisTemplate")@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")private ValueOperations<String, String> operations; // <2>private static String buildKey(Integer id) { // <3>return String.format(KEY_PATTERN, id);}public UserCacheObject get(Integer id) {String key = buildKey(id);String value = operations.get(key);return JSONUtil.parseObject(value, UserCacheObject.class);}public void set(Integer id, UserCacheObject object) {String key = buildKey(id);String value = JSONUtil.toJSONString(object);operations.set(key, value);}}
- <1> 处,通过静态变量,声明 KEY 的前缀,并且使用冒号作为间隔
- <3> 处,声明 KEY_PATTERN 对应的 KEY 拼接方法,避免散落在每个方法中。
- <2> 处,通过 @Resource 注入指定名字的 RedisTemplate 对应的 Operations 对象,这样明确每个 KEY 的类型。
- 剩余的,就是每个方法封装对应的操作。