1. 程式人生 > >hibernate-memcached--在Hibernate中使用Memcached作為一個二級分散式快取

hibernate-memcached--在Hibernate中使用Memcached作為一個二級分散式快取

官方網址: http://code.google.com/p/hibernate-memcached/
目前最新版本為1.0, 支援Hibernate3.3.

下面是具體的使用方法:
hibernate-memcached需要支援的類庫如下:

配置方法如下:

配置Hibernate使用cache提供類

hibernate.cache.provider_class com.googlecode.hibernate.memcached.MemcachedCacheProvider

hibernate.cache.use_query_cache true

其它一些引數設定說明:
Property Default Description
hibernate.memcached.servers localhost:11211 memcached 服務地址,多個用空格分隔
格式host:port 
hibernate.memcached.cacheTimeSeconds 300 快取失效時間,單位秒
hibernate.memcached.keyStrategy HashCodeKeyStrategy 快取Key生成儲存HashCode演算法
hibernate.memcached.readBufferSize DefaultConnectionFactory.DEFAULT_READ_BUFFER_SIZE 從伺服器讀取資料快取區大小
hibernate.memcached.operationQueueLength DefaultConnectionFactory.DEFAULT_OP_QUEUE_LEN Maximum length of the operation queue returned by this connection factory
hibernate.memcached.operationTimeout DefaultConnectionFactory.DEFAULT_OPERATION_TIMEOUT 操作超時時間設定
hibernate.memcached.hashAlgorithm HashAlgorithm.KETAMA_HASH 新增快取資料到伺服器時使用的Hash雜湊演算法。 當 hibernate-memcached 設定成 KETAMA_HASH演算法時,注意:預設客戶端API使用的是 HashAlgorithm.NATIVE_HASH
hibernate.memcached.clearSupported false 支援MemcachedCache.clear()方法清空快取。
建議不要開啟。

配置示例(本文以Hibernate3.3-entitymanager為例)
配置 persistence.xml檔案
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence"" target="_new">http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

<persistence-unit name="entityManager" transaction-type="RESOURCE_LOCAL"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:comp/env/jdbc/qualitydb</jta-data-source><properties><property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/><property name="hibernate.max_fetch_depth" value="3"/><property name="hibernate.show_sql" value="true"/><property name="hibernate.cache.region_prefix" value="quality.cache.ehcache"/><property name="hibernate.cache.use_second_level_cache" value="true"/><property name="hibernate.cache.use_structured_entries" value="true"/><property name="hibernate.cache.use_query_cache" value="true"/><property name="hibernate.cache.provider_class" value="com.googlecode.hibernate.memcached.MemcachedCacheProvider"/><property name="hibernate.memcached.servers" value="localhost:11211"/></properties></persistence-unit></persistence>

啟動後,提示如下:
2008-08-28 17:10:08,312 JCLLoggerAdapter.java265 INFO -- Starting MemcachedClient...
2008-08-28 17:10:08.718 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2008-08-28 17:10:08.750 INFO net.spy.memcached.MemcachedConnection: Connection state changed for [email protected]

表示我們第一步配置已經成功了,接下來,對需要進行快取的Entity進行配置
 1 @Entity
 2 @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)//設定要求快取 3 publicclass Student {
 4  5   @Id
 6   @Column(length=32)
 7 private String id;
 8  9     @Column(length=20)
10 private string name;
11 12     @OneToMany
13     @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
14 private Set<Book> books;
15 16 }

Ok,現在配置已經完成。

Good Luck!

Yours Matthew!

相關配置:

 <!--開啟二級快取-->
 <property name="hibernate.cache.use_second_level_cache">
  true
 </property>
 <!--設定快取提供者 -->
 <property name="hibernate.cache.provider_class">
  com.googlecode.hibernate.memcached.MemcachedCacheProvider
 </property>
 <!-- 設定memcached快取伺服器的埠 -->
 <property name="hibernate.memcached.servers">
  192.168.11.37:11211 192.168.11.37:11212
 </property>
 <!--設定二級快取的字首名稱 -->
 <property name="hibernate.cache.region_prefix">
  quality.cache.ehcache
 </property>
 <!--是否使用結構化的方式快取物件 -->
 <property name="hibernate.cache.use_structured_entries">
  true
 </property>
 <!--是否快取查詢結果 -->
 <property name="hibernate.cache.use_query_cache">true</property>


相關推薦

no