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