Session的clear方法和flush方法

首先session是有一級緩存的,目的是爲了減少查詢數據庫的時間,提高效率,一級緩存的生命週期和session是一樣的,

session.flush()和session.clear()就針對session的一級緩存的處理。

   簡單的說,

1 session.flush()的作用就是將session的緩存中的數據與數據庫同步。

2 session.clear()的作用就是清除session中的緩存數據(不管緩存與數據庫的同步)。


   詳細的說:網上很多這樣的文章,我就不說了,可以看看這篇文章,寫的很詳細。http://blog.csdn.NET/lssssss/article/details/6839633

我說一下一些需要注意的信息:

1 session.clear()的作用是隻清除session中的緩存數據,但不管緩存與數據庫的同步。

比如,你執行了

Po po = new Po();

session.save(po),

之後馬上執行session.clear(),在事務結束的時候,這條數據是不會被持久化到數據庫中的,因爲一般緩存是在事務提交的時候進行清理的,當在清理緩存前就把緩存給清除了,自然就不會同步到數據庫了。不過這個也有例外的情況,就是當對象使用native生成器來生成主鍵id時,當執行session.save()方法時,就會立馬往數據庫插入一條數據,這時候執行session.clear()也不會影響了。

2 當更新或者保存大批量數據的時候,可以每固定數量的時候,進行清理緩存,同時清除緩存:

for (int i = 0; i < 1000;i ++){

if (i /20 == 0) {

  session.flush();

  session.clear();

}

}

因爲把大量的對象放到session緩存中會浪費大量的內容空間。


3 執行完session.flush()時,並不意味着數據就肯定持久化到數據庫中的,因爲事務控制着數據庫,如果事務提交失敗了,緩存中的數據還是照樣會被回滾的。

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章