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