繁体   English   中英

如果我们有多个会话对象,一级缓存如何工作?

[英]how first level cache works, if we have multiple session objects?

我对一级缓存和二级缓存有疑问。

2级缓存

它与sessionFactory关联。 假设我们有两个会话session1session2,并且有一个table student 我们从session1调用get() ,然后它将命中数据库并将对象存储在session1和sessionFactory中。 如果我们从session2调用get() ,则sessionFacory对象将复制到session2。 如果将来我们调用get() ,它将不会访问数据库。 它将从会话对象(一级缓存)中获取。

到目前为止,我很清楚。

之后,另一个名为session3的会话要更新同一条记录,那么如果我们在session1session2上调用get() 会发生什么?

一级缓存

它与会话关联。 如果我们有两个会话session1session2 我们从session1调用get() ,它将命中数据库并将对象存储在session1中。 如果我们使用session2更新,如果下次从session1调用get()会发生什么?

我听说二级缓存有一些缺点。 如果这是真的,那是什么?

您一次要问三个问题。

1.问题

我不确定你是什么意思

session3要更新相同的记录

会议没有自由意志。 如果他们只是想要些什么,就什么也不会发生。 但是,如果您使用的是第三次会议,以更新会话1已经被缓存的实体和工作阶段他们将继续存在缓存(现在已经过时)的版本。 如果使用session1session2更新同一实体,则更新将失败,并出现乐观锁定异常。

不过,第二级缓存将使用session3存储的新版本进行更新。

2.问题

这与第一种情况相同: session1现在有一个陈旧的对象,它将继续使用。

3.问题(第二级缓存的缺点)

各种缓存具有相同的挑战:

  1. 如果将内容放入缓存,但又不再需要它,那么您将浪费CPU时间将其放置在缓存中,而浪费了内存以将其保留在缓存中。

  2. 如果您查找高速缓存,但是找不到所需的内容,那是在浪费CPU时间来查找高速缓存。

  3. 如果在更改后将内容保留在缓存中,则将处理陈旧的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM