练习 - 创建使用 Spring Data Redis 的 Spring Boot 应用程序

已完成

在本单元中,创建一个 Spring Boot 应用程序,该应用程序使用 Spring Data Redis 在 Azure Cache for Redis 中存储和检索数据。 可以在等待 Azure Cache for Redis 实例完成部署时创建应用程序,但与 Azure Cache for Redis 的最终连接除外。

创建 Spring Boot 项目

要创建 Spring Boot 项目,请运行以下 Spring Initializr 命令行:

curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,data-redis -d baseDir=spring-redis-application -d bootVersion=2.4.1.RELEASE -d javaVersion=1.8 | tar -xzvf -

注意

该命令使用 Spring WebSpring Data Redis 组件。 Spring Data Redis 使用 Lettuce Redis 驱动程序,还可将该驱动程序用于更高级的任务。

添加 Spring 代码以管理数据

  1. 在 Spring Boot 项目中的 DemoApplication 类旁边,添加一个 Todo 域对象,如下所示:

    package com.example.demo;
    
    import org.springframework.data.annotation.Id;
    import org.springframework.data.redis.core.RedisHash;
    
    import java.io.Serializable;
    
    @RedisHash("Todo")
    public class Todo implements Serializable {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public String getDetails() {
            return details;
        }
    
        public void setDetails(String details) {
            this.details = details;
        }
    
        public boolean isDone() {
            return done;
        }
    
        public void setDone(boolean done) {
            this.done = done;
        }
    }
    
  2. 创建名为 TodoRepository 的 Spring Data Redis 存储库来管理此集合,如下所示:

    package com.example.demo;
    
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface TodoRepository extends CrudRepository<Todo, String> {
    
    }
    
  3. 添加名为 TodoController 的 Spring MVC 控制器,如下所示:

     package com.example.demo;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/")
    public class TodoController {
    
        private final TodoRepository todoRepository;
    
        public TodoController(TodoRepository todoRepository) {
            this.todoRepository = todoRepository;
        }
    
        @PostMapping("/")
        @ResponseStatus(HttpStatus.CREATED)
        public Todo createTodo(@RequestBody Todo todo) {
            return todoRepository.save(todo);
        }
    
        @GetMapping("/")
        public Iterable<Todo> findAllTodos() {
            return todoRepository.findAll();
        }
    }
    

获取 Azure Cache for Redis 安全密钥

  1. 运行以下命令,以检查 Azure Cache for Redis 实例是否已可供使用。

    az redis show --name $AZ_REDIS_NAME --resource-group $AZ_RESOURCE_GROUP
    

    该命令返回包含 provisioningState 属性的 JSON 数据。 如果 provisioningState 的值为 Succeeded,则表示 Azure Cache for Redis 实例完全可用。

    提示

    如果有 jq 实用工具,则可以使用以下单个命令行来检查准备情况:

    az redis show --name $AZ_REDIS_NAME --resource-group $AZ_RESOURCE_GROUP | jq '.provisioningState'
    
  2. Azure Cache for Redis 实例准备就绪后,运行以下命令来检索其安全密钥:

    az redis list-keys \
        --resource-group $AZ_RESOURCE_GROUP \
        --name $AZ_REDIS_NAME
    

    从输出中复制 primaryKey 值以在下一步中使用。

配置 Spring Boot 以连接到 Azure Cache for Redis

在应用程序中打开 src/main/resources/application.properties 配置文件,并添加以下属性。 将 <redisName> 占位符替换为 Redis 实例名称,并将 <redisPrimaryKey> 占位符替换为从上一步获取的 primaryKey 值。

spring.redis.host=<redisName>.redis.cache.windows.net
spring.redis.password=<redisPrimaryKey>
spring.redis.port=6380
spring.redis.ssl=true

在本地测试应用程序

  1. 通过在开发环境中运行可执行文件 DemoApplication 或通过运行 Spring Boot Maven 插件来运行 Spring Boot 应用程序,如下所示:

    ./mvnw spring-boot:run
    
  2. 在应用程序运行时,使用以下命令将一些数据存储在 Redis 中:

    curl -d '{"description":"a description", "details":"some details"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8080
    
  3. 现在从 Redis 中检索这些数据:

    curl http://127.0.0.1:8080
    

转到下一单元,了解如何使用 Azure Cache for Redis 通过 Spring Session 存储 HTTP 会话数据。