Redis - L2 缓存

通过在 main/resources/application.yaml 中设置 ebean.redis 属性来配置要使用的 redis 服务器,如下所示

请注意,当我们通过 DatabaseFactory 和 DatabaseConfig 以编程方式创建 Database 时,属性配置才能起作用,然后我们需要确保使用 DatabaseConfig.loadFromProperties() 来加载属性。

ebean:
  redis:
    server: test-server
    port: 99
    minIdle: 2
    maxIdle: 20
    maxTotal: 20
    maxWaitMillis: 300

出于测试目的,在 test/resources/application-test.yaml 中将 ebean.test.redis 属性设置为 latest。这将使 ebean-test 自动启动一个 redis docker 容器,以用于 L2 缓存。

ebean:
  test:
    redis: latest
    platform: h2 # h2, postgres, mysql, oracle, sqlserver, sqlite
    ddlMode: dropCreate # none | dropCreate | migrations | create
    dbName: my_app

ebean-redis 依赖项

添加 ebean-redis 作为依赖项。这将自动将其自身注册到 ebean 中作为 L2 缓存服务。

<dependency>
  <groupId>io.ebean</groupId>
  <artifactId>ebean-redis</artifactId>
  <version>13.25.0</version>
</dependency>

@Cache

使用 @Cache 注释的实体 bean 现在将使用 redis 进行 L2 缓存。

@Cache(enableQueryCache = true, nearCache = true, naturalKey = "name")
@Entity
public class Person extends EBase {

  public enum Status {
    NEW,
    ACTIVE,
    INACTIVE
  }

  @Index(unique = true)
  String name;

  Status status;

  LocalDate localDate;

  String notes;

  public Person(String name) {
    this.name = name;
    this.status = Status.NEW;
  }
  ...
}

Docker 容器

我们可以以编程方式启动 docker 容器版本的 Redis。

下面使用 ebean-test-docker 依赖项,该依赖项已随 ebean-test 一起提供。如果我们没有对 ebean-test 的依赖项,则添加 io.ebean:ebean-test-docker:5.0 作为依赖项。

package main;

import io.ebean.docker.commands.RedisContainer;

public class Main {

  public static void main(String[] args) {

    RedisContainer container = RedisContainer.newBuilder("latest")
      .build();

      container.start();
  }
}