[英]How to remove entity with first level cache and JPA in one open session?
[英]how first level cache works, if we have multiple session objects?
我对一级缓存和二级缓存有疑问。
2级缓存
它与sessionFactory关联。 假设我们有两个会话session1和session2,并且有一个table student
。 我们从session1调用get()
,然后它将命中数据库并将对象存储在session1和sessionFactory中。 如果我们从session2调用get()
,则sessionFacory对象将复制到session2。 如果将来我们调用get()
,它将不会访问数据库。 它将从会话对象(一级缓存)中获取。
到目前为止,我很清楚。
之后,另一个名为session3的会话要更新同一条记录,那么如果我们在session1和session2上调用get()
。 会发生什么?
一级缓存
它与会话关联。 如果我们有两个会话session1和session2 。 我们从session1调用get()
,它将命中数据库并将对象存储在session1中。 如果我们使用session2更新,如果下次从session1调用get()
会发生什么?
我听说二级缓存有一些缺点。 如果这是真的,那是什么?
您一次要问三个问题。
1.问题
我不确定你是什么意思
session3要更新相同的记录
会议没有自由意志。 如果他们只是想要些什么,就什么也不会发生。 但是,如果您使用的是第三次会议,以更新会话1已经被缓存的实体和工作阶段他们将继续存在缓存(现在已经过时)的版本。 如果使用session1或session2更新同一实体,则更新将失败,并出现乐观锁定异常。
不过,第二级缓存将使用session3存储的新版本进行更新。
2.问题
这与第一种情况相同: session1现在有一个陈旧的对象,它将继续使用。
3.问题(第二级缓存的缺点)
各种缓存具有相同的挑战:
如果将内容放入缓存,但又不再需要它,那么您将浪费CPU时间将其放置在缓存中,而浪费了内存以将其保留在缓存中。
如果您查找高速缓存,但是找不到所需的内容,那是在浪费CPU时间来查找高速缓存。
如果在更改后将内容保留在缓存中,则将处理陈旧的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.