亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Hibernate二級緩存攻略

2019-11-18 14:50:15
字體:
來源:轉載
供稿:網友

  很多人對二級緩存都不太了解,或者是有錯誤的熟悉,我一直想寫一篇文章介紹一下hibernate的二級緩存的,今天終于忍不住了。

  我的經驗主要來自hibernate2.1版本,基本原理和3.0、3.1是一樣的,請原諒我的頑固不化。

  hibernate的session提供了一級緩存,每個session,對同一個id進行兩次load,不會發送兩條sql給數據庫,但是session關閉的時候,一級緩存就失效了。

  二級緩存是SessionFactory級別的全局緩存,它底下可以使用不同的緩存類庫,比如ehcache、oscache等,需要設置hibernate.cache.PRovider_class,我們這里用ehcache,在2.1中就是 hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider假如使用查詢緩存,加上hibernate.cache.use_query_cache=true

  緩存可以簡單的看成一個Map,通過key在緩存里面找value。

  Class的緩存

  對于一條記錄,也就是一個PO來說,是根據ID來找的,緩存的key就是ID,value是POJO。無論list,load還是iterate,只要讀出一個對象,都會填充緩存。但是list不會使用緩存,而iterate會先取數據庫select id出來,然后一個id一個id的load,假如在緩存里面有,就從緩存取,沒有的話就去數據庫load。假設是讀寫緩存,需要設置:

<cache usage="read-write"/>
  假如你使用的二級緩存實現是ehcache的話,需要配置ehcache.xml

<cache name="com.xxx.pojo.Foo" maxElementsInMemory="500" eternal="false" timeToLiveSeconds="7200" timeToIdleSeconds="3600" overflowToDisk="true" />
  其中eternal表示緩存是不是永遠不超時,timeToLiveSeconds是緩存中每個元素(這里也就是一個POJO)的超時時間,假如eternal="false",超過指定的時間,這個元素就被移走了。timeToIdleSeconds是發呆時間,是可選的。當往緩存里面put的元素超過500個時,假如overflowToDisk="true",就會把緩存中的部分數據保存在硬盤上的臨時文件里面。

  每個需要緩存的class都要這樣配置。假如你沒有配置,hibernate會在啟動的時候警告你,然后使用defaultCache的配置,這樣多個class會共享一個配置。

  當某個ID通過hibernate修改時,hibernate會知道,于是移除緩存。

  這樣大家可能會想,同樣的查詢條件,第一次先list,第二次再iterate,就可以使用到緩存了。實際上這是很難的,因為你無法判定什么時候是第一次,而且每次查詢的條件通常是不一樣的,假如數據庫里面有100條記錄,id從1到100,第一次list的時候出了前50個id,第二次iterate的時候卻查詢到30至70號id,那么30-50是從緩存里面取的,51到70是從數據庫取的,共發送1+20條sql。所以我一直認為iterate沒有什么用,總是會有1+N的問題。

 ?。}外話:有說法說大型查詢用list會把整個結果集裝入內存,很慢,而iterate只select id比較好,但是大型查詢總是要分頁查的,誰也不會真的把整個結果集裝進來,假如一頁20條的話,iterate共需要執行21條語句,list雖然選擇若干字段,比iterate第一條select id語句慢一些,但只有一條語句,不裝入整個結果集hibernate還會根據數據庫方言做優化,比如使用MySQL的limit,整體看來應該還是list快。)

  假如想要對list或者iterate查詢的結果緩存,就要用到查詢緩存了

  查詢緩存

  首先需要配置hibernate.cache.use_query_cache=true

  假如用ehcache,配置ehcache.xml,注重hibernate3.0以后不是net.sf的包名了:

<cache name="net.sf.hibernate.cache.StandardQueryCache"
maxElementsInMemory="50" eternal="false" timeToIdleSeconds="3600"
timeToLiveSeconds="7200" overflowToDisk="true"/>
<cache name="net.sf.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="5000" eternal="true" overflowToDisk="true"/>
  然后

query.setCacheable(true);//激活查詢緩存
query.setCacheRegion("myCacheRegion");//指定要使用的cacheRegion,可選
  第二行指定要使用的cacheRegion是myCacheRegion,即你可以給每個查詢緩存做一個單獨的配置,使用setCacheRegion來做這個指定,需要在ehcache.xml里面配置它:

<cache name="myCacheRegion" maxElementsInMemory="10" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200" overflowToDisk="true" />
  假如省略第二行,不設置cacheRegion的話,那么會使用上面提到的標準查詢緩存的配置,也就是:net.sf.hibernate.cache.StandardQueryCache

  對于查詢緩存來說,緩存的key是根據hql生成的sql,再加上參數,分頁等信息(可以通過日志輸出看到,不過它的輸出不是很可讀,最好改一下它的代碼)。

  比如hql:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久久在线| 欧美成人精品一区二区| 国产精品国产自产拍高清av水多| 日av在线播放中文不卡| 九九精品在线播放| 精品久久久久久久久久久久| 欧美成人免费在线视频| 国产精品一区二区三区久久| 国产亚洲精品美女久久久| 亚洲精品大尺度| 亚洲自拍av在线| 成人高h视频在线| 亚洲福利小视频| 91精品久久久久久久| 欧美精品福利视频| 日韩电影免费在线观看| 国产精品久久久久久久久久尿| 国产精品福利观看| 成人免费网站在线| 91精品国产综合久久香蕉| 久久久久五月天| 国产精品久久久999| 日韩欧美在线视频日韩欧美在线视频| 国产精品一区二区三区在线播放| 第一福利永久视频精品| 欧美午夜视频在线观看| 亚洲天堂久久av| 亚洲精品美女久久久久| 日韩有码在线播放| 亚洲免费高清视频| 午夜精品久久久久久久久久久久久| 欧美黑人狂野猛交老妇| 久久久久久久激情视频| 97在线观看视频| 97精品国产97久久久久久春色| 国产综合香蕉五月婷在线| 91精品国产91久久久久| 亚洲va国产va天堂va久久| 欧美成人性生活| 日韩在线免费观看视频| 日韩视频免费大全中文字幕| 色无极亚洲影院| 深夜福利亚洲导航| 中文字幕视频一区二区在线有码| 欧美福利在线观看| 国产精品高潮呻吟久久av黑人| 精品亚洲aⅴ在线观看| 海角国产乱辈乱精品视频| 亚洲国产成人一区| 国产精品pans私拍| 国产精品免费视频xxxx| 欧美亚洲视频在线看网址| 国产精品美女呻吟| 欧美性高跟鞋xxxxhd| 久久影视免费观看| 国产视频久久久| 国产精品一区二区三区毛片淫片| 亚洲成人激情在线观看| 日韩成人激情视频| 黑人精品xxx一区| 久久夜色撩人精品| 欧美激情女人20p| 亚洲国产99精品国自产| 亚洲欧洲在线播放| 亚洲日本aⅴ片在线观看香蕉| 亚洲高清一二三区| 亚洲精品久久7777777| 亚洲片av在线| 国产福利精品在线| 精品久久久久久国产91| 92国产精品久久久久首页| 亚洲成人激情在线观看| 亚洲欧美日韩第一区| 久久亚洲综合国产精品99麻豆精品福利| 日韩在线视频中文字幕| 在线观看欧美日韩国产| 欧美寡妇偷汉性猛交| 亚洲国产欧美在线成人app| 国产精品福利在线观看| 国产精品电影在线观看| 欧美激情videoshd| 91tv亚洲精品香蕉国产一区7ujn| 久久亚洲精品中文字幕冲田杏梨| 亚洲精品视频在线观看视频| 欧美高清视频在线| 国产精品国产三级国产专播精品人| 国产精品精品一区二区三区午夜版| 国产欧美一区二区三区久久| 亚洲毛片在线观看| 亚洲人永久免费| 日韩av免费网站| 精品久久久999| 久久久久久中文字幕| 亚洲电影免费观看高清| 欧美专区福利在线| 国产精品亚洲第一区| 欧洲成人午夜免费大片| 国产精品久久久久久久久久ktv| 国产精品成人免费视频| 国产精品狼人色视频一区| 日韩免费观看视频| 亚洲男人的天堂在线| 日日狠狠久久偷偷四色综合免费| 亚洲肉体裸体xxxx137| 欧美福利视频在线观看| 欧美三级xxx| 国产精品一区久久| 欧美极品在线视频| 黄色一区二区在线| 97成人精品视频在线观看| 欧美成人精品h版在线观看| 欧美贵妇videos办公室| 欧美激情国产精品| 亚洲精品美女免费| 美日韩精品免费观看视频| 中文字幕久热精品在线视频| 久久久91精品| 日韩福利视频在线观看| 亚洲国产精品成人av| 精品久久久国产精品999| 91久久国产婷婷一区二区| 日韩精品电影网| 久久久久久中文字幕| 国产精品成人观看视频国产奇米| 久久综合免费视频| 91香蕉国产在线观看| 欧美激情综合色| 国产精品一区二区久久久久| 91精品国产91久久久久久不卡| 欧美成人一区在线| 成人午夜高潮视频| 久久成人精品视频| 久久精品国产v日韩v亚洲| 91高潮精品免费porn| 成人网在线免费观看| 亚洲成人久久一区| 国产精品旅馆在线| 国产精品亚洲网站| 国产狼人综合免费视频| 亚洲国产欧美在线成人app| 91精品视频网站| 2019中文字幕在线免费观看| 亚洲黄页网在线观看| 国产一区玩具在线观看| 国产精品十八以下禁看| 欧美午夜片在线免费观看| 国产精品视频一区二区高潮| 国产一区二区三区在线观看视频| 国产综合在线视频| 欧美激情在线观看| 欧美人在线视频| 久久久噜噜噜久久| 日韩视频在线观看免费| 国产99久久精品一区二区永久免费| 成人av资源在线播放| 国产香蕉精品视频一区二区三区| 欧美一级黄色网| 一区二区福利视频| 在线精品91av| 久久久久久久久久久网站| 亚洲网址你懂得| 欧美理论电影网| 色婷婷亚洲mv天堂mv在影片| 亚洲欧美日本精品|