`

hibernate中session的三种状态

阅读更多

Hibernate中的对象有三种状态: 瞬时状态 (Transient),持久状态 (Persistent),

1. 脱管状态 (Detached)

1. 1. 瞬时状态 (Transient)

new 命令开辟内存空间的 Java 对象,也就是平时所熟悉的普通 Java 对象。

如: Student stu = new Student();

瞬时对象特点:

(1) 不和 Session 实例关联

(2) 在数据库中没有和瞬时对象关联的记录

2. 2. 持久状态 (Persistent)

持久的实例在数据库中有对应的记录,并拥有一个持久化标识 (identifier).

持久对象总是与 Session Transaction 相关联,在一个 Session 中,对持久对象的改变不会马上对数据库进行变更,而必须在 Transaction 终止,也就是执行 commit() 之后,才在数据库中真正运行 SQL 进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏 (dirty) 对象。

瞬时对象转为持久对象:

(1) 通过 Session save() saveOrUpdate() 方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。

(2) 使用 fine(),get(),load() iterater() 待方法查询到的数据对象,将成为持久化对象。

持久化对象的特点:

(1) Session 实例关联

(2) 在数据库中有和持久对象关联的记录

3. 3. 脱管状态 (Detached)

与持久对象关联的 Session 被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。

脱管对象特点:

(1) 本质上和瞬时对象相同

(2) 只是比爱瞬时对象多了一个数据库记录标识值 id.

持久对象转为脱管对象:

当执行 close() clear(),evict() 之后,持久对象会变为脱管对象。

瞬时对象转为持久对象:

通过 Session update(),saveOrUpdate() lock() 等方法,把脱管对象变为持久对象。

三种状态相互转化的状态图如下:

Hibernate三种状态

4 .结合 save(),update(),saveOrUpdate() 方法说明对象的状态

(1)Save() 方法将瞬时对象保存到数据库,对象的临时状态将变为持久化状态。当对象在持久化状态时,它一直位于 Session 的缓存中,对它的任何操作在事务提交时都将同步到数据库,因此,对一个已经持久的对象调用 save() update() 方法是没有意义的。如:

Student stu = new Strudnet();

stu.setCarId(“200234567”);

stu.setId(“100”);

// 打开 Session, 开启事务

session.save(stu);

stu.setCardId(“20076548”);

session.save(stu); // 无效

session.update(stu); // 无效

// 提交事务,关闭 Session

(2)update() 方法两种用途重新关联脱管对象为持久化状态对象,显示调用 update() 以更新对象。调用 update() 只为了关联一个脱管对象到持久状态,当对象已经是持久状态时,调用 update() 就没有多大意义了。如:

// 打开 session ,开启事务 

stu = (Student)session.get(Student.class,”123456”);

stu.setName(“Body”);

session.update(stu); // 由于 stu 是持久对象,必然位于 Session 缓冲中,

stu 所做的变更将 // 被同步到数据库中。所以 update() 是没有意义的,可以不要这句效果一样的。

// 提交事务,关闭 Session

Hibernate 总是执行 update 语句,不管这个脱管对象在离开 Session 之后有没有更改过,在清理缓存时 Hibernate 总是发送一条 update 语句,以确保脱管对象和数据库记录的数据一致,如:

Student stu = new Strudnet();

stu.setCarId(“1234”);

// 打开 Session1, 开启事务

session1.save(stu);

// 提交事务,关闭 Session1

stu.set(“4567”); // 对脱管对象进行更改

// 打开 Session2, 开启事务

session2.update(stu);

// 提交事务,关闭 Session2

注:即使把 session2.update(stu); 这句去掉,提交事务时仍然会执行一条 update() 语句。

如果希望只有脱管对象改变了, Hibernate 才生成 update 语句,可以把映射文件中 <class> 标签的 select-before-update 设为 true, 这种会先发送一条 select 语句取得数据库中的值,判断值是否相同,如果相同就不执行 update 语句。不过这种做法有一定的缺点,每次 update 语句之前总是要发送一条多余的 select 语句,影响性能。对于偶尔更改的类,设置才是有效的,对于经常要更改的类这样做是影响效率的。

(3)saveOrUpdate() 方法兼具 save() update() 方法的功能,对于传入的对象, saveOrUpdate() 首先判断其是脱管对象还是临时对象,然后调用合适的方法。

分享到:
评论
17 楼 sswh 2011-03-17  
p_x1984 写道
使用的是JUDE.可以了解下。


图还是比较漂亮的,只是画图的时候,箭头有的向左有的向右,很不习惯。

随便画了点东西,点保存,报异常。。

还不是太成熟。
16 楼 shikonglaike 2011-03-16  
韩悠悠 写道
dreamvalley 写道
很想了解 lz的图是用什么工具画的

用Rational Rose就能化出来,

是用IBM Rational Systems Developer画的。
15 楼 sailei1 2011-03-04  
楼主 总结的很好 ,  作为新手 谢谢了
14 楼 韩悠悠 2011-01-10  
dsjt 写道
1. 瞬时状态 (Transient)
由 new 命令开辟内存空间的 Java 对象,也就是平时所熟悉的普通 Java 对象。
瞬时对象特点:
(1) 不和 Session 实例关联
(2) 在数据库中没有和瞬时对象关联的记录
===================
如果直接new 一个 与数据库一条记录对应的对象,这个对象也应该是临时态吧?


对,new 出来的都是
13 楼 韩悠悠 2011-01-10  
laoshifu 写道
我想问一下:hibernate的三种状态,是为了理解而提出来的概念还是,hibernate提供了对象的状态的实现?

提供了实现。
12 楼 韩悠悠 2011-01-10  
dreamvalley 写道
很想了解 lz的图是用什么工具画的

用Rational Rose就能化出来,
11 楼 chenk818 2011-01-09  
<div class="quote_div">
<p><span lang="EN-US">Student stu = new Strudnet();</span> </p>
<p><span lang="EN-US">stu.setCarId(“200234567”);</span> </p>
<p><span lang="EN-US">stu.setId(“100”);</span> </p>
<p><span lang="EN-US">//</span> <span>打开</span> <span lang="EN-US">Session,</span> <span>开启事务</span> </p>
<p><span lang="EN-US">session.save(stu);</span> </p>
<p><span lang="EN-US">stu.setCardId(“20076548”);</span> </p>
<p><span lang="EN-US">session.save(stu);<span> </span>//</span> <span>无效</span> </p>
<p><span lang="EN-US">session.update(stu); //</span> <span>无效</span> </p>
<p><span lang="EN-US"></span><span lang="EN-US"><br></span></p>
<p> </p>
<p> </p>
<p>楼主说的“无效”应该有问题吧,只是没有意义而已</p>
</div>
10 楼 p_x1984 2011-01-07  
呵呵!够细心的哥们!写的时候,手太快了。
9 楼 caoyangx 2011-01-07  
你的标题少了一个b。
8 楼 laoshifu 2011-01-07  
我想问一下:hibernate的三种状态,是为了理解而提出来的概念还是,hibernate提供了对象的状态的实现?
7 楼 dsjt 2011-01-07  
1. 瞬时状态 (Transient)
由 new 命令开辟内存空间的 Java 对象,也就是平时所熟悉的普通 Java 对象。
瞬时对象特点:
(1) 不和 Session 实例关联
(2) 在数据库中没有和瞬时对象关联的记录
===================
如果直接new 一个 与数据库一条记录对应的对象,这个对象也应该是临时态吧?
6 楼 itddy 2011-01-06  
<div class="quote_title">p_x1984 写道</div>
<div class="quote_div">
<p>Hibernate中的对象有三种状态:<span style="font-size: small;"><span lang="EN-US"><span><span> </span></span></span><span>瞬时状态</span> </span><span lang="EN-US">(Transient),<span><span style="font-size: small;">持久状态</span> </span><span style="font-size: 10.5pt;" lang="EN-US"><span style="font-size: small;">(Persistent),</span>
<p><span style="font-size: small;"><span lang="EN-US"><span>1.</span> </span><span>脱管状态</span> <span lang="EN-US">(Detached)</span> </span></p>
</span></span></p>
<p><span lang="EN-US"><span>1.<span><span style="font-size: small;"> 1.</span> </span></span></span><strong><span style="color: #ff0000;"><span>瞬时状态</span> <span lang="EN-US">(Transient)</span> </span></strong></p>
<p><span>由</span> <span lang="EN-US">new</span> <span>命令开辟内存空间的</span> <span lang="EN-US">Java</span> <span>对象,也就是平时所熟悉的普通</span> <span lang="EN-US">Java</span> <span>对象。</span> </p>
<p><span>如:</span> <span lang="EN-US">Student stu = new Student();</span> </p>
<p><span>瞬时对象特点:</span> </p>
<p><span lang="EN-US">(1)</span> <span>不和</span> <span lang="EN-US">Session</span> <span>实例关联</span> </p>
<p><span lang="EN-US">(2)</span> <span>在数据库中没有和瞬时对象关联的记录</span> </p>
<p><span lang="EN-US"><span>2.<span><span style="font-size: small;"> 2.</span> </span></span></span><strong><span style="color: #ff0000;"><span>持久状态</span> <span lang="EN-US">(Persistent)</span> </span></strong></p>
<p><span>持久的实例在数据库中有对应的记录,并拥有一个持久化标识</span> <span lang="EN-US">(identifier).</span> </p>
<p><span>持久对象总是与</span> <span lang="EN-US">Session</span> <span>和</span> <span lang="EN-US">Transaction</span> <span>相关联,在一个</span> <span lang="EN-US">Session</span> <span>中,对持久对象的改变不会马上对数据库进行变更,而必须在</span> <span lang="EN-US">Transaction</span> <span>终止,也就是执行</span> <span lang="EN-US">commit()</span> <span>之后,才在数据库中真正运行</span> <span lang="EN-US">SQL</span> <span>进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏</span> <span lang="EN-US">(dirty)</span> <span>对象。</span> </p>
<p><span>瞬时对象转为持久对象:</span> </p>
<p><span lang="EN-US"><span>(1)<span><span style="font-size: small;"> </span></span></span></span><span>通过</span> <span lang="EN-US">Session</span> <span>的</span> <span lang="EN-US">save()</span> <span>和</span> <span lang="EN-US">saveOrUpdate()</span> <span>方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。</span> </p>
<p><span lang="EN-US"><span>(2)<span><span style="font-size: small;"> </span></span></span></span><span>使用</span> <span lang="EN-US">fine(),get(),load()</span> <span>和</span> <span lang="EN-US">iterater()</span> <span>待方法查询到的数据对象,将成为持久化对象。</span> </p>
<p><span>持久化对象的特点:</span> </p>
<p><span lang="EN-US"><span>(1)<span><span style="font-size: small;"> </span></span></span></span><span>和</span> <span lang="EN-US">Session</span> <span>实例关联</span> </p>
<p><span lang="EN-US"><span>(2)<span><span style="font-size: small;"> </span></span></span></span><span>在数据库中有和持久对象关联的记录</span> </p>
<p><span lang="EN-US"><span>3.<span><span style="font-size: small;"> 3.</span> </span></span></span><strong><span style="color: #ff0000;"><span>脱管状态</span> <span lang="EN-US">(Detached)</span> </span></strong></p>
<p><span>与持久对象关联的</span> <span lang="EN-US">Session</span> <span>被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。</span> </p>
<p><span>脱管对象特点:</span> </p>
<p><span lang="EN-US"><span>(1)<span><span style="font-size: small;"> </span></span></span></span><span>本质上和瞬时对象相同</span> </p>
<p><span lang="EN-US"><span>(2)<span><span style="font-size: small;"> </span></span></span></span><span>只是比爱瞬时对象多了一个数据库记录标识值</span> <span lang="EN-US">id.</span> </p>
<p><span>持久对象转为脱管对象:</span> </p>
<p><span>当执行</span> <span lang="EN-US">close()</span> <span>或</span> <span lang="EN-US">clear(),evict()</span> <span>之后,持久对象会变为脱管对象。</span> </p>
<p><span>瞬时对象转为持久对象:</span> </p>
<p><span>通过</span> <span lang="EN-US">Session</span> <span>的</span> <span lang="EN-US">update(),saveOrUpdate()</span> <span>和</span> <span lang="EN-US">lock()</span> <span>等方法,把脱管对象变为持久对象。</span> </p>
<p style="text-indent: 15.75pt;"><span>三种状态相互转化的状态图如下:</span> </p>
<p style="text-indent: 15.75pt;"><img class="fit-image" style="width: 606px; height: 383px;" src="http://images.51cto.com/files/uploadimg/20090702/0932310.gif" alt="Hibernate三种状态" width="783" height="532"></p>
<p><span lang="EN-US">4</span> <span>.结合</span> <span lang="EN-US">save(),update(),saveOrUpdate()</span> <span>方法说明对象的状态</span> </p>
<p><span lang="EN-US">(1)Save()</span> <span>方法将瞬时对象保存到数据库,对象的临时状态将变为持久化状态。当对象在持久化状态时,它一直位于</span> <span lang="EN-US">Session</span> <span>的缓存中,对它的任何操作在事务提交时都将同步到数据库,因此,对一个已经持久的对象调用</span> <span lang="EN-US">save()</span> <span>或</span> <span lang="EN-US">update()</span> <span>方法是没有意义的。如:</span> </p>
<p><span lang="EN-US">Student stu = new Strudnet();</span> </p>
<p><span lang="EN-US">stu.setCarId(“200234567”);</span> </p>
<p><span lang="EN-US">stu.setId(“100”);</span> </p>
<p><span lang="EN-US">//</span> <span>打开</span> <span lang="EN-US">Session,</span> <span>开启事务</span> </p>
<p><span lang="EN-US">session.save(stu);</span> </p>
<p><span lang="EN-US">stu.setCardId(“20076548”);</span> </p>
<p><span lang="EN-US">session.save(stu);<span> </span>//</span> <span>无效</span> </p>
<p><span lang="EN-US">session.update(stu); //</span> <span>无效</span> </p>
<p><span lang="EN-US">//</span> <span>提交事务,关闭</span> <span lang="EN-US">Session</span> </p>
<p><span lang="EN-US">(2)update()</span> <span>方法两种用途重新关联脱管对象为持久化状态对象,显示调用</span> <span lang="EN-US">update()</span> <span>以更新对象。调用</span> <span lang="EN-US">update()</span> <span>只为了关联一个脱管对象到持久状态,当对象已经是持久状态时,调用</span> <span lang="EN-US">update()</span> <span>就没有多大意义了。如:</span> </p>
<p><span lang="EN-US">//</span> <span>打开</span> <span lang="EN-US">session</span> <span lang="EN-US">,开启事务 </span> </p>
<p style="text-indent: 68.25pt;"><span lang="EN-US">stu = (Student)session.get(Student.class,”123456”);</span> </p>
<p style="text-indent: 68.25pt;"><span lang="EN-US">stu.setName(“Body”);</span> </p>
<p style="text-indent: 68.25pt;"><span lang="EN-US">session.update(stu);<span> </span>//</span> <span>由于</span> <span lang="EN-US">stu</span> <span>是持久对象,必然位于</span> <span lang="EN-US">Session</span> <span>缓冲中,</span> </p>
<p style="text-indent: 68.25pt;"><span>对</span> <span lang="EN-US">stu</span> <span>所做的变更将</span> <span lang="EN-US">//</span> <span>被同步到数据库中。所以</span> <span lang="EN-US">update()</span> <span>是没有意义的,可以不要这句效果一样的。</span> </p>
<p><span lang="EN-US">//</span> <span>提交事务,关闭</span> <span lang="EN-US">Session</span> </p>
<p><span lang="EN-US">Hibernate</span> <span>总是执行</span> <span lang="EN-US">update</span> <span>语句,不管这个脱管对象在离开</span> <span lang="EN-US">Session</span> <span>之后有没有更改过,在清理缓存时</span> <span lang="EN-US">Hibernate</span> <span>总是发送一条</span> <span lang="EN-US">update</span> <span>语句,以确保脱管对象和数据库记录的数据一致,如:</span> </p>
<p><span lang="EN-US">Student stu = new Strudnet();</span> </p>
<p><span lang="EN-US">stu.setCarId(“1234”);</span> </p>
<p><span lang="EN-US">//</span> <span>打开</span> <span lang="EN-US">Session1,</span> <span>开启事务</span> </p>
<p><span lang="EN-US">session1.save(stu);</span> </p>
<p><span lang="EN-US">//</span> <span>提交事务,关闭</span> <span lang="EN-US">Session1</span> </p>
<p><span lang="EN-US">stu.set(“4567”);<span> </span>//</span> <span>对脱管对象进行更改</span> </p>
<p><span lang="EN-US">//</span> <span>打开</span> <span lang="EN-US">Session2,</span> <span>开启事务</span> </p>
<p><span lang="EN-US">session2.update(stu);</span> </p>
<p><span lang="EN-US">//</span> <span>提交事务,关闭</span> <span lang="EN-US">Session2</span> </p>
<p><span>注:即使把</span> <span lang="EN-US">session2.update(stu);</span> <span>这句去掉,提交事务时仍然会执行一条</span> <span lang="EN-US">update()</span> <span>语句。</span> </p>
<p><span>如果希望只有脱管对象改变了,</span> <span lang="EN-US">Hibernate</span> <span>才生成</span> <span lang="EN-US">update</span> <span>语句,可以把映射文件中</span> <span lang="EN-US">&lt;class&gt;</span> <span>标签的</span> <span lang="EN-US">select-before-update</span> <span>设为</span> <span lang="EN-US">true,</span> <span>这种会先发送一条</span> <span lang="EN-US">select</span> <span>语句取得数据库中的值,判断值是否相同,如果相同就不执行</span> <span lang="EN-US">update</span> <span>语句。不过这种做法有一定的缺点,每次</span> <span lang="EN-US">update</span> <span>语句之前总是要发送一条多余的</span> <span lang="EN-US">select</span> <span>语句,影响性能。对于偶尔更改的类,设置才是有效的,对于经常要更改的类这样做是影响效率的。</span> </p>
<p style="text-indent: 15.75pt;"><span lang="EN-US">(3)saveOrUpdate()</span> <span>方法兼具</span> <span lang="EN-US">save()</span> <span>和</span> <span lang="EN-US">update()</span> <span>方法的功能,对于传入的对象,</span> <span lang="EN-US">saveOrUpdate()</span> <span>首先判断其是脱管对象还是临时对象,然后调用合适的方法。</span> </p>
</div>
<p> </p>
5 楼 yanical 2011-01-06  
hibernate的这三个状态真让人不爽。
不如做成Toplink的模式
4 楼 p_x1984 2011-01-06  
使用的是JUDE.可以了解下。
3 楼 zchjeff 2011-01-06  
总结的相当好,学习了
2 楼 dreamvalley 2011-01-06  
很想了解 lz的图是用什么工具画的
1 楼 humaeks 2011-01-05  
并非到事务提交才对数据库操作,提交只是把变更持久化,实际上通过flush是可以操作的,只是这个变更只能在本事务看到而已。

面试快一年,能把这个问题说清的一只手数完。

相关推荐

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    hibernate对象三种状态

    在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...

    Hibernate中对象的三种状态

    在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一...总之,理解Hibernate中对象的三种状态以及它们之间的转换对于开发人员来说至关重要。熟练掌握这些概念有助于编写出更加高效、可靠的Java持久化代码。

    Hibernate 对象的三种状态和特点

    以下是Hibernate对象的三种主要状态及其特点: 1) 临时状态(Transient State): 当通过`new`关键字创建一个新的对象时,该对象处于临时状态。在这个状态下,对象并未与任何Session关联,因此它的变化不会自动反映...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    Hibernate Session 4种对象状态.docx

    Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate如何管理和操作数据。 1. **临时状态(Transient State)**: 当一...

    Hibernate_Session_Transaction

    在Java的持久化框架Hibernate中,`Session`和`Transaction`是两个至关重要的概念,它们在数据管理和事务处理中起到核心作用。这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与...

    Hibernate(session管理)

    本文将深入探讨Hibernate中的核心概念——Session管理。 首先,理解Session在Hibernate中的角色至关重要。Session是Hibernate的主要工作单元,它是应用程序与数据库之间的桥梁。它负责保存、检索和更新Java对象,...

    hibernate和session学习

    在Hibernate中,`SessionFactory`是核心组件之一,它是线程安全的,用于创建`Session`对象。`SessionFactory`通常在应用启动时创建一次,然后在整个应用生命周期中复用。创建`SessionFactory`需要通过读取Hibernate...

    Hibernate的Session的javadoc

    Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...

    Hibernate三种状态

    Hibernate对象有三种状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于优化数据操作和避免潜在的问题至关重要。 首先,瞬时状态(Transient)是指通过new关键字创建的...

    hibernate session生命周期示例

    在Hibernate中,事务和Session是紧密关联的,事务的边界通常定义了Session的工作范围。 3. **持久化操作**: - **加载和检索**:使用`get()`或`load()`方法可以加载一个实体,如果对象存在于数据库,Hibernate将...

    hibernate的session.flush

    `Session.flush()`方法是一个关键的操作,它强制Hibernate将内存中的对象状态同步到数据库,确保数据的一致性。这篇博客深入探讨了`Session.flush()`的工作原理和应用场景。 `Session`在Hibernate中主要有以下职责...

    Hibernate三种状态区分

    在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...

    Hibernate 三种状态

    在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括三种状态:瞬时状态(Transient)、持久化状态(Persistent)以及游离状态(Detached)。本文将详细阐述这三种状态的特点及其转换机制。 #### 二、瞬时...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    首先,我们需要理解Session在Hibernate中的角色。Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、删除和检索对象。Session对象就像一个临时的工作区域,用于在应用程序和数据库之间...

    Hibernate中的实体状态及转换

    首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`new`关键字创建一个实体对象时,它默认处于临时状态。此时,对象未被Hibernate管理,即使对象包含了主键ID,如果...

    Hibernate三种状态和Session常用的方法

    Hibernate三种状态和Session常用的方法 Hibernate 作为一个...理解 Hibernate 中的三种状态和 Session 中的常用方法是非常重要的。只有深入了解这些机制,我们才能更好地使用 Hibernate 框架来开发高效的应用程序。

    hibernate相关配置 3种状态

    本篇将详细阐述Hibernate中的对象映射关系以及对象的三种状态。 对象映射是Hibernate的核心特性,它通过ORM(Object-Relational Mapping)技术将Java对象与数据库表之间的关系进行映射。Hibernate提供了一种声明式...

    hibernate的核心接口--Session

    - **缓存的同步更新**: 当 Session 清理缓存时,Hibernate 会检查缓存中的对象状态是否发生变化,并同步更新数据库,从而确保数据一致性。 - **缓存相关方法**: - **`flush()`**: 刷新缓存并执行必要的 SQL 语句,...

Global site tag (gtag.js) - Google Analytics