Hibernate:使二级缓存失效

For*_*hit 3 java spring caching hibernate

我了解到,如果持久存储中发生任何更新,L2 缓存将无法自行更新。那么,我应该在 DAO 层的每次写入或更新方法之后调用 evict2ndLevelCache() 方法吗?或者有更好的策略?

\n\n

http://howtodoinjava.com/2013/07/02/how-hibernate-second-level-cache-works/

\n\n
\n

如果某些用户或进程直接在数据库中进行更改,则在该缓存区域的\xe2\x80\x9ctimeToLiveSeconds\xe2\x80\x9d 持续时间过去之前,\n 二级缓存无法自行更新。在这种情况下,最好使整个缓存无效并让 hibernate 再次构建其缓存。您可以使用下面的代码片段来使整个休眠二级缓存无效。

\n
\n

Dra*_*vic 5

如果您正在对 Hibernate 实体本身进行更改,则无需执行任何其他操作即可确保 L2 缓存的一致性,Hibernate 会处理它。

如果您通过本机查询进行更改,请明确提及哪些实体受到影响,否则 Hibernate 将使整个二级缓存失效,如此处所述

如果您从另一个进程更改数据库中的数据,那么 Hibernate 不会意识到这一点,您将必须定义最适合您的要求的策略(过期策略、从应用程序外部调用的显式失效等)。