天天看點

【hibernate架構】緩存機制之二級緩存

二級緩存是sessionfactory級别的緩存,可以跨越session存在。

hibernate文檔裡關于二級緩存的說明:

二級緩存(the second level cache)

hibernate支援多種多樣的二級緩存的實作,但hibernate本身并沒有寫二級緩存的實作(有一個是用來内部測試的,不要用于産品開發),而是由其他的廠商來提供。

表 21.1. 緩存政策提供商(cache providers)

org.hibernate.cache.hashtablecacheprovider(記憶體)

org.hibernate.cache.ehcacheprovider(記憶體,硬碟)

org.hibernate.cache.oscacheprovider(記憶體,硬碟)

org.hibernate.cache.swarmcacheprovider(能用于叢集環境)

org.hibernate.cache.treecacheprovider(能用于叢集環境)

org.hibernate.cache.jbc.jbosscacheregionfactory(能用于叢集環境)

下面我們用ehcacheprovider做實驗。

這是我們以前在hibernate.cfg.xml中關于緩存的配置:

如果想要使用其他廠商提供的緩存,就要在上面做好配置:

這裡我們使用ehcacheprovider這個二級緩存

ehcacheprovider自己也有一個配置檔案:(這個配置檔案在hibernate包下的project/etc/ehcache.xml)

講二級緩存是為了應付面試的,工作中,除非必要,一般是不用二級緩存的。

有必要用二級緩存的場景:

1.經常被通路的

2.改動不大,不會經常被改動

3.數量有限

二級緩存的使用,利用注解(不是jpa的注解,是hibernate的)

例如:

nonstrict_read_write說的是非嚴格讀寫

read_only是隻讀(在二級緩存裡不允許改)

read_write是既能讀又能改

region()是對應的緩存政策名稱,不填就預設使用default 

使用的時候别忘了引入ehcache的jar包:ehcache-1.5.0.jar

加入ehcache的配置檔案ehcache.xml之後,在category類上加注解:

之後進行測試:

測試結果:

hibernate: 

    select

        category0_.id as id0_0_,

        category0_.name as name0_0_ 

    from

        category category0_ 

    where

        category0_.id=?

c0

發現第二次去緩存中去取了

轉載請注明出處:http://blog.csdn.net/acmman/article/details/44132207