1.hibernate緩存、二級緩存是怎麼實現的,除了oscache還引用了哪些緩存,緩存的原理是怎樣的,如果自己去模擬二級緩存該怎麼寫,假如數據被不停地修改或更新,那怎樣保證緩存中的數據是最新的?
(1)一級緩存就是Session級別的緩存,一個Session做了一個查詢操作,它會把這個操作的結果放在一級緩存中,如果短時間內這個
session(一定要同一個session)又做了同一個操作,那麼hibernate直接從一級緩存中拿,而不會再去連數據庫,取數據;
(2)二級緩存就是SessionFactory級別的緩存,顧名思義,就是查詢的時候會把查詢結果緩存到二級緩存中,如果同一個sessionFactory
創建的某個session執行了相同的操作,hibernate就會從二級緩存中拿結果,而不會再去連接數據庫;
(3)Hibernate中提供了兩級Cache,第一級別的緩存是Session級別的緩存,它是屬於事務範圍的緩存。這一級別的緩存由hibernate管理
的,一般情況下無需進行干預;第二級別的緩存是SessionFactory級別的緩存,它是屬於進程範圍或羣集範圍的緩存。這一級別的緩
存可以進行配置和更改,並且可以動態加載和卸載。 Hibernate還爲查詢結果提供了一個查詢緩存,它依賴於第二級緩存;
OScache特點:
所謂緩存,就是將程序或系統經常要調用的對象存在內存中,以便其使用時可以快速調用,不必再去創建新的重複的實例。這樣做可以減少系統開銷,提高系統效率。
緩存主要可分爲二大類:
一、通過文件緩存,顧名思義文件緩存是指把數據存儲在磁盤上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
二、內存緩存,也就是實現一個類中靜態Map,對這個Map進行常規的增刪查.
使用緩存的原則就是:儘量用低開銷的計算代替高開銷的計算。比如直接從其他數據庫 查詢的開銷要遠高於內存中的計算返回,網絡請求要遠高於本地(同一vm中)請求。
memcache:分佈式應用 內存對象緩存系統開發,佔用其他機子的內存。很多互聯網 ,負載均衡三臺(以三臺爲例)其他web服務器 可以共享一臺memcache的資源。傳遞的信息以鍵值對的形式存儲。傳遞的數據要實現序列化。
oscache:頁面級緩存(網上強調最多的東西),佔用本機的內存資源。可 以選擇緩存到硬盤,如存取到硬盤重啓服務也可重新獲得上次持久化的資源,而如果緩存到內存就不行。一般沒必要緩存到硬盤,因爲i/o操作也是比較耗資源,和從其他數據庫 取往往優勢很小。oscache存取數據的作用域分爲application和session兩種。
ehcache:hibernate 緩存,dao緩存,安全性憑證緩存(acegi),web緩存,應用開發持久化和分佈式應用 緩存。
如何保證緩存和數據庫數據一致性:http://www.36dsj.com/archives/43950
RPC原理分析:http://blog.csdn.net/mindfloating/article/details/39474123