java - Hibernate二级缓存理解

标签 java hibernate caching

**1.**对于二级缓存,只能设置超时时间但不能强制刷新/清除实体缓存?或者添加注解 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) ,例如每次执行 saveorupdate/mergeupdate 时自动刷新/清除缓存? hibernateTemplate.flush() 与此有什么关系?


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

最佳答案

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

也就是说,您通常不必这样做 - Hibernate 会为您更新缓存(除非您正在执行一些相当具体的操作,例如 SQL 更新 - 在这种情况下请澄清您的问题)。

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

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

关于java - Hibernate二级缓存理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1825206/

相关文章:

java - 如何为 ListView 创建自定义光标适配器以用于图像和文本?

java - Web 应用程序中的多语言数据

java - Hibernate 在不引用其他表的情况下持久化 Map<String, String>

c++ - 缓存未命中压力测试 : stunning results. 。有什么解释吗?

java - 删除 JLayeredPane 中的图层

java - 使用所有元素对二维数组进行排序

java - Java中排除周末的日期差异计算

Hibernate:替换已弃用的 AbstractPreDatabaseOperationEvent.getEntity()?

asp.net - 是否可以使用 asp.net 页面级缓存,并根据参数和本地化进行变化

php - 让 Varnish 在 Magento 上工作