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

已完成

在本单元中,你将创建一个 Spring Boot 应用程序,该应用程序使用 Spring Data Redis 存储和检索 Azure Redis 缓存中的数据。 可以创建应用程序,但与 Azure 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 Redis 缓存实例是否可供使用。

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

    该命令返回包含属性 provisioningState 的 JSON 数据。 如果 provisioningState 具有该值 Succeeded,Azure Redis 缓存实例将完全可用。

    小窍门

    如果有 jq 实用工具,可以使用以下单一命令行检查就绪情况:

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

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

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

配置 Spring Boot 以连接到 Azure Redis 缓存

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

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 Redis 缓存通过 Spring Session 存储 HTTP 会话数据。