官方网址:
http://code.google.com/p/hibernate-memcached/
目前最新版本为1.0, 支持Hibernate3.3.
下面是具体的使用方法:
hibernate-memcached需要支持的类库如下:
配置方法如下:
配置Hibernate使用cache提供类
其它一些参数设置说明:
配置示例(本文以Hibernate3.3-entitymanager为例)
配置 persistence.xml文件
启动后,提示如下:
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 sun.nio.ch.SelectionKeyImpl@16e59da
表示我们第一步配置已经成功了,接下来,对需要进行缓存的Entity进行配置
Ok,现在配置已经完成。
Good Luck!
目前最新版本为1.0, 支持Hibernate3.3.
下面是具体的使用方法:
hibernate-memcached需要支持的类库如下:
- hibernate-memcached-<version>.jar
- memcached-2.1.jar
- spy-2.4.jar
- commons-codec 1.3
- slf4j-1.5.0.jar 如果你的项目使用的是Log4j,可以用 slf4j-log4j12-1.5.0.jar
配置方法如下:
配置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 >
< 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 sun.nio.ch.SelectionKeyImpl@16e59da
表示我们第一步配置已经成功了,接下来,对需要进行缓存的Entity进行配置
1
@Entity
2 @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 设置要求缓存
3 public class 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 }
2 @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 设置要求缓存
3 public class 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>