我很难理解何时休眠命中第二级缓存,以及何时使缓存失效。
以下是我目前的理解:
- 第二级缓存存储会话之间的实体,范围是 SessionFactory
- 您必须告诉缓存哪些实体,默认情况下不会缓存任何实体
- 查询缓存将查询结果存储在缓存中。
我不明白的是
- 休眠什么时候到达这个缓存?
- 假设我已经设置了第二级缓存,但没有设置查询缓存。我想缓存我的客户,有50000人。我可以通过什么方式从缓存中检索客户?
- 我想我可以从 cache 中通过 id 获得它们。这很容易,但也不值得高速缓存。但是如果我想对所有的客户进行一些计算。假设我想显示一个客户列表,那么我如何访问他们呢?
- 如果禁用查询缓存,我将如何获得所有客户?
- 如果有人更新了其中一个客户会发生什么?
还是我想的缓存完全错了?在这种情况下,使用二级缓存更合适的方法是什么?休眠文档根本不清楚缓存在现实中是如何工作的。只有如何安装的说明书。
更新:
因此,我开始明白,二级缓存(没有查询缓存)可以很好地通过 id 加载数据。例如,我有一个用户对象,我想检查在 Web 应用程序的每个请求的权限。通过在第二级缓存中缓存用户来减少数据库访问是否是一个好的情况?就像我将用户 ID 存储在会话或任何地方,当我需要检查权限时,我将加载用户的 ID 和检查权限。