session.flush()和session.clear()就針對session的一級緩存的處理。
簡單的說,
1 session.flush()的作用就是將session的緩存中的數據與數據庫同步。
2 session.clear()的作用就是清除session中的緩存數據(不管緩存與數據庫的同步)。
執行完session.flush()時,並不意味着數據就肯定持久化到數據庫中的,因為事務控制着數據庫,如果事務提交失敗了,緩存中的數據還是照樣會被回滾的。
flush本意是沖刷,這個方法大概取自它引申義沖馬桶的意思,馬桶有個池子,你往里面扔東西,會暫時保存在池子里,只有你放水沖下去,東西才會進入下水道。
同理很多流都有一個這樣的池子,專業術語叫緩沖區,當你print或者write的時候,會暫時保存在緩沖區,並沒有發送出去,這是出於效率考慮的,因為數據不會自己發送過去,必須有其他機制,而且這個很消耗資源,就像馬桶你需要很多水,才能沖走,你如果扔一點東西,就沖一次水,那你水費要爆表了,同樣如果你寫一行文字,或者一個字節,就要馬上發送出去,那網絡流量,CPU使用率等等都要爆表了,所以一般只有在你真正需要發送否則無法繼續的時候,調用flush,將數據發送出去。
http://blog.csdn.net/leidengyan/article/details/7514484
session.flush()和session.clear()就針對session的一級緩存的處理。