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