Bean IUD 失效

为持久化 Bean 自动提供缓存失效。缓存失效按 Bean 类型和 ID 值处理。

集群消息

在集群中发送的消息包含 Bean 类型和 3 个 ID 列表 - 插入、更新和删除 Bean 的 ID 值列表。

二级查询缓存

  • 插入、更新或删除:使 Bean 类型的整个二级查询缓存失效

对于任何 Bean 持久化事件,都会使关联 Bean 类型相关的整个二级查询缓存失效。例如,保存客户 Bean 会使 Customer Bean 类型的整个二级查询缓存失效。

二级 Bean 缓存

  • 插入:不影响二级 Bean 缓存
  • 更新:用更改更新条目
  • 删除:根据 ID 值从二级 Bean 缓存中删除条目

表 IUD 失效(批量更新)

批量插入、更新或删除事件按表处理。对于给定的表,确定依赖于该表的 Bean 类型,然后针对每个 Bean 类型,根据需要使二级 Bean 缓存和二级查询缓存失效。

集群消息

在集群中发送的消息包含表名称以及用于插入、更新和删除的布尔标志。

二级查询缓存

  • 插入、更新或删除:使与相关 bean 类型关联的整个 L2 查询缓存无效

对于任何批量语句(批量表插入、更新或删除语句),与关联 bean 类型关联的整个 L2 查询缓存都会失效。例如,对 customer 表进行批量更新会使 Customer bean 类型的整个 L2 查询缓存失效。

二级 Bean 缓存

  • 插入:不影响二级 Bean 缓存
  • 更新:使与相关 bean 类型关联的整个 L2 bean 缓存无效
  • 删除:使与相关 bean 类型关联的整个 L2 bean 缓存无效

显式失效

我们可以使用应用程序代码执行显式失效。当数据在 Ebean 外部修改时,我们希望执行此操作。例如,数据由其他框架、JDBC 代码等更新。对于这种情况,我们希望显式使 L2 缓存的某些部分失效。

使用 externalModification()

// inform Ebean that some rows have been inserted and updated
// on the country table.
// ... Ebean will invalidate the appropriate caches
boolean inserts = true;
boolean updates = true;
boolean deletes = false;
DB.externalModification("country", inserts, updates, deletes);

使用 ServerCacheManager

ServerCacheManager 还提供用于清除缓存的显式 API。

// clearAll() caches via the ServerCacheManager ...
ServerCacheManager cacheManager = database.cacheManager();

// Clear all the caches on the default/primary EbeanServer
cacheManager.clearAll();

// clear both the bean and query cache
// for Country beans ...
cacheManager.clear(Country.class);