1. 概述
Spring Boot的主要吸引力之一是它通常将第三方配置减少到仅几个属性。
在本教程中,我们将了解Spring Boot如何简化使用Redis的操作。
2. 为什么选择Redis?
Redis是最流行的内存数据结构存储之一,因此,它可以用作数据库、缓存和消息代理。
在性能方面,它以快速的响应时间而闻名。因此,它每秒可以处理数十万次操作,并且易于扩展。
而且它与Spring Boot应用程序配合得很好,例如,我们的微服务架构可以将其用作缓存,也可以将其用作NoSQL数据库。
3. 运行Redis
首先,让我们使用其官方Docker镜像创建一个Redis实例。
$ docker run -p 16379:6379 -d redis:6.0 redis-server --requirepass "mypass"
上面我们刚刚在端口16379上启动了一个Redis实例,密码为mypass。
4. Starter
Spring大力支持使用Spring Data Redis连接我们的Spring Boot应用程序和Redis。
因此,接下来,让我们确保pom.xml中具有spring-boot-starter-data-redis依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.11</version>
</dependency>
5. Lettuce
接下来我们来配置客户端。
我们将使用的Java Redis客户端是Lettuce,因为Spring Boot默认使用它。但是,我们也可以使用Jedis。
无论哪种方式,结果都是RedisTemplate的一个实例:
@Bean
public RedisTemplate<Long, Book> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Long, Book> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
// Add some specific configuration here. Key serializers, etc.
return template;
}
6. 属性
当我们使用Lettuce时,我们不需要配置RedisConnectionFactory,Spring Boot会为我们完成这项工作。
那么,我们所剩下的就是在我们的application.properties文件中指定一些属性(对于Spring Boot 2.x):
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=16379
spring.redis.password=mypass
spring.redis.timeout=60000
对于Spring Boot 3.x,我们需要设置以下属性:
spring.data.redis.database=0
spring.data.redis.host=localhost
spring.data.redis.port=16379
spring.data.redis.password=mypass
spring.data.redis.timeout=60000
解释:
- database设置连接工厂使用的数据库索引
- host是服务器主机所在的位置
- port表示服务器监听的端口
- password是服务器的登录密码
- timeout建立连接超时
当然,我们还可以配置许多其他属性,完整的配置属性列表可在Spring Boot文档中找到。
7. 演示
最后,让我们尝试在应用程序中使用它。如果我们想象一个Book类和一个BookRepository,我们可以创建和检索Book,使用我们的RedisTemplate与Redis作为我们的后端进行交互:
@Autowired
private RedisTemplate<Long, Book> redisTemplate;
public void save(Book book) {
redisTemplate.opsForValue().set(book.getId(), book);
}
public Book findById(Long id) {
return redisTemplate.opsForValue().get(id);
}
Lettuce默认会为我们管理序列化和反序列化,所以现在无需再做任何事情。不过,值得庆幸的是,这也可以进行配置。
另一个重要特性是RedisTemplate是线程安全的,因此它在多线程环境中也能正常工作。
8. 总结
在本文中,我们配置了Spring Boot以通过Lettuce与Redis通信。我们通过一个Starter、一个@Bean配置和一些属性实现了它。
总而言之,我们使用RedisTemplate让Redis充当简单的后端。
Post Directory
