如何使用Lettuce配置SpringBoot+Redis - Baeldung


在本教程中,我们将看到Spring Boot如何简化Redis的使用。
Redis是最流行的内存数据结构存储之一。因此,它可以用作数据库,缓存和消息代理。
在性能方面,由于响应时间短而众所周知。结果,它每秒可以处理数十万次操作,并且易于扩展。
并且,它与Spring Boot应用程序搭配得很好。例如,我们可以将其用作微服务体系结构中的缓存。我们也可以将其用作NoSQL数据库。
 
首先,让我们使用其官方Docker映像创建一个Redis实例。

$ docker run -p 16379:6379 -d redis:6.0 redis-server --requirepass "mypass"

上面,我们刚刚使用密码mypass在端口16379上启动了Redis实例。
 
对于使用Spring Data Redis将我们的Spring Boot应用程序与Redis连接起来,Spring提供了强大的支持。
因此,接下来,让我们确保在pom.xml中具有spring-boot-starter-data-redis依赖项:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.2.6.RELEASE</version>    
</dependency>

 
接下来,让我们配置客户端。
我们将使用的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;
}

使用Lettuce时,不需要配置RedisConnectionFactory。Spring Boot为我们做到了。
然后,剩下的就是在application.properties文件中指定一些属性:
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=16379
spring.redis.password=mypass
spring.redis.timeout=60000

分别代表:

  • database 设置连接工厂使用的数据库索引
  • 主机是服务器主机所在的位置
  • port表示服务器正在侦听的端口
  • password是服务器的登录密码,并且
  • 超时建立连接超时

当然,我们可以配置许多其他属性。Spring Boot文档中提供了配置属性完整列表
 
最后,让我们尝试在应用程序中使用它。如果我们想象一个Book类和一个BookRepository,我们可以使用RedisTemplate与Redis作为后端交互来创建和检索Book:

@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 是线程安全的,因此它将在多线程环境中正常工作。
 
结论
在本文中,我们将Spring Boot配置为通过Lettuce与Redis对话。并且,我们通过启动程序,单个@Bean配置和少数几个属性实现了它。
最后,我们使用 RedisTemplate来使Redis充当简单的后端。
完整示例可在GitHub上找到