gpt4 book ai didi

hibernate - hibernate 缓存保存了什么?

转载 作者:行者123 更新时间:2023-12-04 15:27:20 28 4
gpt4 key购买 nike

你好:
我对 hibernate 缓存缓存的内容感到困惑。

从文档中,我知道 hibernate 中有缓存类型。

一级 :交易级别。
似乎要被 session 持久化的实体被缓存在这里。

二级缓存 :我真的不知道这个缓存,从api,它说这个缓存在sessionfactory级别工作......我无法理解。

查询缓存 :这对我来说很容易理解(也许我错了)。它将查询参数与相关实体一起缓存。

这就是我对 hibernate 中缓存的所有了解。

谁能给我更多细节?

顺便说一句,我不擅长 sql/jdbc 工作,所以我也想知道我应该如何了解 sql/jdbc 以了解有关 hibernate 的更多信息(任何文档?)?我不想只是一个hibernate用户,因为它只是一个工具,我想要从这个美妙的框架中学到一些东西。 :)

最佳答案

一级缓存

默认情况下启用此缓存。
当 NHibernate 通过其唯一 id 从数据库加载实体时,它会自动放入所谓的身份映射中。此标识映射表示第一级缓存。

一级缓存的生存期与当前 session 相关联。一旦当前 session 关闭,相应的第一级缓存的内容就会被清除。一旦实体在第一级缓存中,想要在当前 session 中加载完全相同的实体的后续操作将从缓存中检索该实体,并且不需要到数据库的往返。

此实体映射背后的主要原因之一是避免内存中的两个不同实例可以表示同一数据库记录(或实体)的情况。

(改编自 NH 常见问题解答)

二级缓存

此缓存位于单个 session 范围缓存之上。使用此缓存,您可以节省许多到数据库的往返行程,因为任何 session 中的任何人第一次加载确定的实体时,它都会保留在缓存中,因此下一个请求(来自任何其他 session )将从缓存中获取它。

要使用 L2 缓存,您需要一个缓存提供程序,例如 SysCache 或 Memcache。这些家伙将缓存实体的值存储为由实体 id 散列的数组 os 字符串。需要注意的是,缓存的不是 .net 对象,而是它的值。

据说它与 session 工厂绑定(bind),因为缓存将适用于确定的 session 工厂创建的 session ,因此不同 session 工厂创建的 session 不会共享缓存。 session 工厂的概念你清楚吗?

查询缓存

这个真的很简单,但是有一个问题。它将缓存查询及其参数,但不会缓存返回的实体。它只会缓存它们的 Id,所以它只对 L2 缓存有意义,因为它包含与该 Id 关联的值。

NHiernate 关于缓存的 FAQ 条目:

https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

关于hibernate - hibernate 缓存保存了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077495/

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