gpt4 book ai didi

java - 如果我们有多个 session 对象,一级缓存如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:52 26 4
gpt4 key购买 nike

我有关于一级和二级缓存的问题。

二级缓存

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

至此我很清楚。

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

一级缓存

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

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

最佳答案

您同时问了三个问题。

<强>1。问题

不太明白你的意思

session3 want to update the same record

session 没有自由意志。如果他们只是想要某样东西,那么几乎什么也不会发生。但是,如果您使用第三个 session 来更新已缓存在 session1session2 中的实体,它们将保留缓存(现已过时)版本。如果您使用 session1session2 更新同一实体,则更新将失败并出现乐观锁定异常。

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

<强>2。问题

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

<强>3。问题(二级缓存的缺点)

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

  1. 如果您将内容放入缓存但不再需要它,那么您就会浪费 CPU 时间来将其放在那里,并浪费内存来将其保留在那里。

  2. 如果您查看缓存但没有找到您要查找的内容,那么您就是在浪费 CPU 时间来查找缓存。

  3. 如果您在更改后将内容保留在缓存中,您将使用过时的数据。

关于java - 如果我们有多个 session 对象,一级缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30131131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com