Java 二级hibernate缓存理解

Java 二级hibernate缓存理解,java,hibernate,caching,Java,Hibernate,Caching,**1.**对于二级缓存,只能设置超时时间,但不能强制刷新/清除实体的缓存?或者放入注释@Cache(用法=cacheconcurrencysttrategy.NONSTRICT\u READ\u WRITE)如每次执行saveorupdate/mergeupdate时自动刷新/清除缓存?什么是hibernateTemplate.flush()与此相关 2.为所有实体启用二级缓存是否良好?在这种情况下,如果我不希望缓存所有实体时的缓存时间太长,您使用的ehcache平均超时是多少?1)如果必须

**1.**对于二级缓存,只能设置超时时间,但不能强制刷新/清除实体的缓存?或者放入注释
@Cache(用法=cacheconcurrencysttrategy.NONSTRICT\u READ\u WRITE)
如每次执行saveorupdate/mergeupdate时自动刷新/清除缓存?什么是hibernateTemplate.flush()与此相关


2.为所有实体启用二级缓存是否良好?在这种情况下,如果我不希望缓存所有实体时的缓存时间太长,您使用的ehcache平均超时是多少?

1)如果必须,您可以手动从二级缓存中逐出实体。为此目的有几种方法;有些退出实体(或集合)的单个实例;其他人驱逐给定类(或给定实体名称/角色名称)的所有实体

也就是说,您通常不必这样做,Hibernate会为您更新缓存(除非您正在做一些非常具体的事情,比如SQL更新,在这种情况下,请澄清您的问题)

2) 通常-不,缓存所有实体不好。缓存不可变的实体以及那些经常加载/很少更新的实体通常是个好主意;假设你没有那么多。但同样,这取决于你在做什么

超时是一个拐杖(或者是一种保护措施,如果你愿意的话),它可以使你的缓存大小/状态保持合理,即使你不这样做。好的缓存策略不应该依赖于它。

1)如果必须,您可以手动从二级缓存中逐出实体。为此目的有几种方法;有些退出实体(或集合)的单个实例;其他人驱逐给定类(或给定实体名称/角色名称)的所有实体

也就是说,您通常不必这样做,Hibernate会为您更新缓存(除非您正在做一些非常具体的事情,比如SQL更新,在这种情况下,请澄清您的问题)

2) 通常-不,缓存所有实体不好。缓存不可变的实体以及那些经常加载/很少更新的实体通常是个好主意;假设你没有那么多。但同样,这取决于你在做什么

超时是一个拐杖(或者是一种保护措施,如果你愿意的话),它可以使你的缓存大小/状态保持合理,即使你不这样做。好的缓存策略不应该依赖于它