緩存的基本特性
緩存基本特性:1.時(shí)間記錄,進(jìn)入Cache的時(shí)間
2.timeout過期時(shí)間,cache里面數(shù)據(jù)多久過期
3.eviction policy 清楚策略,最不經(jīng)常訪問的數(shù)據(jù),最久沒訪問到的數(shù)據(jù)
4.命中率:Cache的數(shù)據(jù)被選中的比率
5.分級(jí)Cache,支持 Region分級(jí),比如ehcache
6.分布式,分布在不同的計(jì)算機(jī)上
7.鎖,事務(wù),數(shù)據(jù)同步
各個(gè)Cluster之間的Cache同步有多種實(shí)現(xiàn)方法。比如JMS,RMI
Cache中一般有g(shù)et,put,remove,clear
對(duì)于Cluster的Cache來說,讀(get)肯定是local的,只需要從本地內(nèi)存中獲取,而Remove/clear,需要和其他計(jì)算機(jī)同步,put可以是local的,因?yàn)槿绻x不到,可以從數(shù)據(jù)庫(kù)中讀
remote put:一臺(tái)計(jì)算機(jī)把數(shù)據(jù)放到自己的Cache中,這個(gè)數(shù)據(jù)需要傳播到Cluster其他計(jì)算機(jī)上,這樣其他Cluster可以同步,但是如果數(shù)據(jù)大,傳播的代價(jià)就大了
local put:只放到本地計(jì)算機(jī)的Cache里,不需要同步到其他Cluster,從Cache得不到的數(shù)據(jù)可以在數(shù)據(jù)庫(kù)里讀取
過期數(shù)據(jù):在hibernate等orm工具中,有一個(gè)原則,就是不要把沒有commit的數(shù)據(jù)放到緩存中,防止臟讀,而且remove之后必須通知其他Cluster,保證大部分時(shí)間內(nèi),給用戶的數(shù)據(jù)不是過期的數(shù)據(jù)
ORM Cache中,一般分2種Cache,一種是類緩存,一種是查詢緩存,類緩存是以ID對(duì)應(yīng)Entity對(duì)象,而查詢緩存是用來存放一條查詢語句對(duì)應(yīng)的結(jié)果集,然后再到類緩存里找響應(yīng)的實(shí)體。
類緩存:一類Entity一個(gè)Region
查詢緩存:hibernate在一個(gè)地方維護(hù)每個(gè)表的最后更新時(shí)間,其實(shí)也就是放在上面org.hibernate.cache. UpdateTimestampsCache所指定的緩存配置里面,當(dāng)通過hibernate更新的時(shí)候,hibernate會(huì)知道這次更新影響了哪些表。然后它更新這些表的最后更新時(shí)間。每個(gè)緩存都有一個(gè)生成時(shí)間和這個(gè)緩存所查詢的表,當(dāng)hibernate查詢一個(gè)緩存是否存在的時(shí)候,如果緩存存在,它還要取出緩存的生成時(shí)間和這個(gè)緩存所查詢的表,然后去查找這些表的最后更新時(shí)間,如果有一個(gè)表在生成時(shí)間后更新過了,那么這個(gè)緩存是無效的。 可以看出,只要更新過一個(gè)表,那么凡是涉及到這個(gè)表的查詢緩存就失效了,因此查詢緩存的命中率可能會(huì)比較低。
7
posted on 2010-11-02 16:30 羔羊 閱讀(189) 評(píng)論(0) 編輯 收藏 所屬分類: 緩存