Redis - L2 cache

Configure the redis server to use by setting ebean.redis properties in main/resources/application.yaml like below:

Note that for property configuration to work when we programmatically create Database via DatabaseFactory and DatabaseConfig, then we need to make sure that we use DatabaseConfig.loadFromProperties() to load the properties.

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

For testing purposes set ebean.test.redis property to latest in in test/resources/application-test.yaml. This will get ebean-test to automatically start a redis docker container for use with L2 caching.

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

ebean-redis dependency

Add ebean-redis as a dependency. This will automatically register itself with ebean as the L2 cache service.

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

@Cache

Entity beans annotated with @Cache will now use redis for L2 caching.

@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;
  }
  ...
}