hibernate-memcached--在Hibernate中使用Memcached作為一個二級分散式快取
阿新 • • 發佈:2019-01-17
官方網址: http://code.google.com/p/hibernate-memcached/
目前最新版本為1.0, 支援Hibernate3.3.
下面是具體的使用方法:
hibernate-memcached需要支援的類庫如下:
配置方法如下:
配置Hibernate使用cache提供類
其它一些引數設定說明:
配置示例(本文以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!
目前最新版本為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>