【发布时间】:2011-10-26 21:28:27
【问题描述】:
我无法理解休眠何时命中二级缓存以及何时使缓存无效。
这是我目前理解的:
- 二级缓存存储会话之间的实体,范围是 SessionFactory
- 您必须告诉缓存哪些实体,默认情况下不会缓存任何实体
- 查询缓存将查询结果存储在缓存中。
我不明白的是
- hibernate 何时访问此缓存?
- 假设我设置了二级缓存,但没有设置查询缓存。我想缓存我的客户,他们有 50000 个。我可以通过哪些方式从缓存中检索客户?
- 我假设我可以通过 id 从缓存中获取它们。这很容易,但也不值得缓存。但是,如果我想对所有客户进行一些计算怎么办。假设我想显示客户列表,那么我将如何访问他们?
- 如果禁用查询缓存,我将如何获得所有客户?
- 如果有人更新了其中一位客户会发生什么?
- 该客户会在缓存中失效还是所有客户都会失效?
或者我认为缓存完全错误?在这种情况下,二级缓存更合适的用途是什么?休眠文档根本不清楚缓存在现实中是如何工作的。只有如何设置它的说明。
更新: 所以我开始明白二级缓存(没有查询缓存)将有利于通过 id 加载数据。例如,我有一个用户对象,我想检查 Web 应用程序中每个请求的权限。通过在二级缓存中缓存用户来减少数据库访问是否是一个很好的案例?就像我将用户 ID 存储在会话中或任何地方,当我需要检查权限时,我会通过它的 ID 加载用户并检查权限。
【问题讨论】:
标签: java hibernate caching second-level-cache