hibernate使用memcached作为二级缓存,怎么构建memcached集群搭建

Hibernate中使用Memcached作为二级缓存的配置方法
所需jar文件:
hibernate-memcached-1.2.2.jar
memcached-2.1.jar
spy-2.4.jar
slf4j-log4j12-1.5.0.jar
slf4j-api-1.5.0.jar
commons-codec-1.3.jar
hibernate.cfg.xml文件设置:
hibernate.cfg.xml内容如下,
&?xml version='1.0'
encoding='UTF-8'?&
&!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
&!-- Generated by MyEclipse Hibernate
Tools.&&&&&&&&&&&&&&&&&&
&hibernate-configuration&
&session-factory&
&&property
name="myeclipse.connection.profile"&myconnect&/property&
&&property
name="connection.url"&
&&jdbc:mysql://localhost:3306/test
&&/property&
&&property
name="connection.username"&root&/property&
&&property
name="connection.password"&123456&/property&
&&property
name="connection.driver_class"&
&&com.mysql.jdbc.Driver
&&/property&
&&property
name="dialect"&
&&org.hibernate.dialect.MySQLDialect
&&/property&
&&!--开启二级缓存--&
&&property
name="hibernate.cache.use_second_level_cache"&
&&/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"&
&&/property&
&&!--是否缓存查询结果
&&property
name="hibernate.cache.use_query_cache"&true&/property&
resource="com/myeclipse/hibernate/TUser.hbm.xml"
&/session-factory&
&/hibernate-configuration&
运行测试信息中显示:
- Starting MemcachedClient...
15:50:20.453 INFO
net.spy.memcached.MemcachedConnection:& Added {QA
sa=/192.168.11.37:11211, #Rops=0, #Wops=0, #iq=0, topRop=null,
topWop=null, toWrite=0, interested=0} to connect queue
配置完成。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。posts - 155,&
comments - 600,&
trackbacks - 0
2728293031123456781011121314151617182122232425262728293031123456
留言簿(42)
随笔分类(144)
随笔档案(109)
文章档案(1)
积分与排名
阅读排行榜
评论排行榜
今天在网上看到一个用Memcached作为Hibernate二级分布式缓存,感觉挺有兴趣,就是尝试用了,感觉还不错,就推荐给大家看一下。
目前最新版本为1.0, 支持Hibernate3.3.
下面是具体的使用方法:
hibernate-memcached需要支持的类库如下:
hibernate-memcached-&version&.jar
配置方法如下:
配置Hibernate使用cache提供类
hibernate.cache.provider_class
com.googlecode.hibernate.memcached.MemcachedCacheProvider
hibernate.cache.use_query_cache
其它一些参数设置说明:
Description
hibernate.memcached.servers
localhost:11211
memcached 服务地址,多个用空格分隔
格式host:port
hibernate.memcached.cacheTimeSeconds
缓存失效时间,单位秒
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
支持MemcachedCache.clear()方法清空缓存。
建议不要开启。
配置示例(本文以Hibernate3.3-entitymanager为例)
配置 persistence.xml文件
&?xml&version="1.0"&encoding="UTF-8"?&
&persistence&xmlns="/xml/ns/persistence""&target="_new"&/xml/ns/persistence"&xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&xsi:schemaLocation="/xml/ns/persistence&/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&
启动后,提示如下:
17:10:08,312 JCLLoggerAdapter.java265 INFO -- Starting MemcachedClient...
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
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&{
&5&&&@Id
&6&&&@Column(length=32)
&7&&&&&private&String&
&9&&&&&@Column(length=20)
10&&&&&private&string&
12&&&&&@OneToMany
13&&&&&@Cache(usage&=&CacheConcurrencyStrategy.READ_WRITE)
14&&&&&private&Set&Book&&
Ok,现在配置已经完成。
Good Luck!
Yours Matthew!
阅读(14254)
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存[未登录]
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存[未登录]
我真笨,没有整出来,ssh加memcached时,applicationContext.xml文件中怎么配置的&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
上传一个例子让我们看看更好!!!&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
这个配置很简单,而且我在Hibernate的JPA实现中也实现了。具体配置如下:persistence.xml&?xml version=&1.0& encoding=&UTF-8&?&&persistence xmlns=&& xmlns:xsi=& xsi:schemaLocation=& /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&启动后,提示如下: 17:10:08,312 JCLLoggerAdapter.java265 INFO -- Starting MemcachedClient... 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 17:10:08.750 INFO net.spy.memcached.MemcachedConnection:
Connection state changed for sun.nio.ch.SelectionKeyImpl@16e59da表示已经配置成功了。&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
Hibernate-memcached 1.0 已经正式发布 (20-Aug-2008),本人会在最近时间更新本文,展示一个真正可以工作的示例出来。&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
文章已经更新,增加了一个示例演示。&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存[未登录]
有没有测试性能怎么样?内存情况如何?关注。。。继续&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
@x.matthew
wewew&&&&
&as[未登录]
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
ssh加memcached时,applicationContext.xml文件中怎么配置请看:&&&&
&re: hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
你好 ,你使用的jta应该是hibernate中的jta吧?&&&&hibernate用memcached做为二级缓存遇到的诡异问题
项目是由hibernate+struts2+spring开发的,由于某些原因,一个项目,一分为二(就是复制一份代码,改了工程名,然后两个项目各自维护自己的代码)。服务器上启动了三个memcache作为二级缓存!
项目跑了几个月没啥问题。然后对项目进行改版,新换了服务器,部署了新代码,然后就出现一个诡异的错误!以前两个分开的项目,一个维护前台代码,一个维护后台代码,出现的问题就是:后台对资源编辑之后,前台查看该资源,就会报出如下错误:
HTTP Status 500 -
type Exception report
description The server encountered an internal error () that
prevented it from fulfilling this request.
java.lang.ClassCastException: java.lang.Long cannot be cast to
java.util.Date
&org.hibernate.type.TimestampType.deepCopyNotNull(TimestampType.java:89)
&org.hibernate.type.MutableType.deepCopy(MutableType.java:48)
&org.hibernate.type.AbstractType.assemble(AbstractType.java:88)
&org.hibernate.type.TypeFactory.assemble(TypeFactory.java:443)
&org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.java:119)
&org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.java:105)
&org.hibernate.event.def.DefaultLoadEventListener.assembleCacheEntry(DefaultLoadEventListener.java:587)
&org.hibernate.event.def.DefaultLoadEventListener.loadFromSecondLevelCache(DefaultLoadEventListener.java:542)
&org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:397)
&org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
&org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
&org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
&org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
&org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
&org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
&mon.hibernate3.BaseDaoImpl.get(BaseDaoImpl.java:111)
&mon.hibernate3.BaseManagerImpl.findById(BaseManagerImpl.java:33)
&sun.reflect.NativeMethodAccessorImpl.invoke0(Native
&sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&java.lang.reflect.Method.invoke(Method.java:597)
&org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
&org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
&org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
&org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
&$Proxy28.findById(Unknown Source)
&com.g2us.cms.action.front.CmsPageAct.content(CmsPageAct.java:237)
&com.g2us.core.PageBaseAction.execute(PageBaseAction.java:153)
&sun.reflect.NativeMethodAccessorImpl.invoke0(Native
&sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&java.lang.reflect.Method.invoke(Method.java:597)
&com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
&com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
&mon.struts2.interceptor.NoLoginFrontInterceptor.doIntercept(NoLoginFrontInterceptor.java:118)
&com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
&com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:222)
&com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
&mon.struts2.interceptor.UrlInterceptor.doIntercept(UrlInterceptor.java:101)
&com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&com.g2us.core.web.CookieIdentityInterceptor.doIntercept(CookieIdentityInterceptor.java:59)
&com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&mon.struts2.interceptor.DomainNameInterceptor.doIntercept(DomainNameInterceptor.java:25)
&com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&mon.struts2.interceptor.ProcessingStartInterceptor.intercept(ProcessingStartInterceptor.java:32)
&com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
&org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
&org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
&org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
&org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
&org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
note The full stack trace of the root cause is available in the
Apache Tomcat/7.0.22 logs.
Apache Tomcat/7.0.22
但是过一会就又好了。同样在前台查看某资源,然后在后台编辑,也报同样的错,但是也是过一阵就好了!
开始以为是配置文件的问题,然后把配置文件前前后后查了好久,没发现什么问题。然后尝试了多种方法:比如,把date类行都换成varchar类型;比如把映射文件中的set映射删除,这样减少错误发生机会,结果还是老样子!。。。。。。。。。。。
&&&&&结果查了好久,同事找到了问题的原因:因为两个工程是一个工程代码分出来的,而且两个工程用了同样的memcached做二级缓存,这样造成了以上问题!
引以为戒啊!不过想不明白的是:为啥上一个版本跑了四个多月都没出现类似的问题!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1126人阅读
Java(92)
Hibernamte(18)
官方网址:&
目前最新版本为1.0, 支持Hibernate3.3.
下面是具体的使用方法:
hibernate-memcached需要支持的类库如下:
hibernate-memcached-&version&.jar
配置方法如下:
配置Hibernate使用cache提供类
hibernate.cache.provider_class
com.googlecode.hibernate.memcached.MemcachedCacheProvider
hibernate.cache.use_query_cache
其它一些参数设置说明:
Description
hibernate.memcached.servers
localhost:11211
memcached 服务地址,多个用空格分隔
格式host:port&
hibernate.memcached.cacheTimeSeconds
缓存失效时间,单位秒
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
支持MemcachedCache.clear()方法清空缓存。
建议不要开启。
配置示例(本文以Hibernate3.3-entitymanager为例)
配置 persistence.xml文件
&?xml&version=&1.0&&encoding=&UTF-8&?&
&persistence&xmlns=&/xml/ns/persistence&&&target=&_new&&/xml/ns/persistence&&xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&&xsi:schemaLocation=&/xml/ns/persistence&/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&
启动后,提示如下:
17:10:08,312 JCLLoggerAdapter.java265 INFO -- Starting MemcachedClient...
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
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&{
&6&&&@Column(length=32)
&7&&&&&private&String&
&9&&&&&@Column(length=20)
10&&&&&private&string&
12&&&&&@OneToMany
13&&&&&@Cache(usage&=&CacheConcurrencyStrategy.READ_WRITE)
14&&&&&private&Set&Book&&
Ok,现在配置已经完成。
Good Luck!
Yours Matthew!
相关配置:
&!--开启二级缓存--&
&property name=&hibernate.cache.use_second_level_cache&&
&/property&
&!--设置缓存提供者 --&
&property name=&hibernate.cache.provider_class&&
com.googlecode.hibernate.memcached.MemcachedCacheProvider
&/property&
&!-- 设置memcached缓存服务器的端口 --&
&property name=&hibernate.memcached.servers&&
192.168.11.37:8.11.37:11212
&/property&
&!--设置二级缓存的前缀名称 --&
&property name=&hibernate.cache.region_prefix&&
quality.cache.ehcache
&/property&
&!--是否使用结构化的方式缓存对象 --&
&property name=&hibernate.cache.use_structured_entries&&
&/property&
&!--是否缓存查询结果 --&
&property name=&hibernate.cache.use_query_cache&&true&/property&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:515457次
积分:7063
积分:7063
排名:第2401名
原创:114篇
转载:377篇
评论:72条hibernate&配置memcache作为二级缓存
项目要上线,这几天在搞缓存的问题,因为使用的是ssh的框架,需要加缓存(memcached),于是上网找了下,发现网上都是千篇一律,虽然主要的也说了,但是,对于我这个新手,还是很多不了解的,于是乎自己总结多方说明和自己的研究结果!
首先memcached的安装不说了!
然后需要下载hibernate、memcache集成的相关jar包:
如果你的项目使用的是Log4j,可以用
最主要的是:
hibernate的配置如下(配置在applicationContext.xml中):
name="hibernateProperties"&
&&&&value&
&&&hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
&&&hibernate.show_sql=true
&&&hibernate.format_sql=true
&&&hibernate.query.substitutions=true
1, false 0
&&&hibernate.jdbc.batch_size=20
&!--配置Hibernate使用cache提供类
&&&hibernate.cache.provider_class=com.googlecode.hibernate.memcached.MemcachedCacheProvider
&&&hibernate.cache.use_query_cache=true
&&&hibernate.memcached.servers=localhost:11211
&&&hibernate.cache.use_second_level_cache=true
&&&hibernate.cache.region_prefix=quality.cache.ehcache
&&&hibernate.memcached.operationTimeout=30000
&&&&/value&
&&&/property&
其它一些参数设置说明:
Description
hibernate.memcached.servers
localhost:11211
memcached 服务地址,
多个用空格分隔
格式host:port
hibernate.memcached.cacheTimeSeconds
缓存失效时间,单位秒
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
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
支持MemcachedCache
.clear()方法
清空缓存。
建议不要开启。
(摘自:)
注意:hibernate.memcached.operationTimeout单位应该是ms的,所以&本系统设置的超时时间是30s
配置好之后,将jar包加入项目中,启动服务,如果服务启动正常,说明配置已经完成!
然后就是最主要的了,需要在*.hbm.xml中加入&cache
usage="read-write"/&
&?xml version="1.0"?&
&!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN" ""&
&hibernate-mapping
package="com.g2us.article.entity"&
&&class name="Article"
table="arti_article"&
attribute="sync-DAO"&false&/meta&
&!--id的缓存--&
usage="read-write"/&&&&id
name="id" type="java.lang.Long"
column="ARTICLE_ID"&&generator
class="native"/&&/id&
&&&property
name="title" column="TITLE" type="string" not-null="false"
length="255"/&
&set name="comments" table="common_comment"
cascade="all-delete-orphan"&
&!--一对多缓存--&
usage="read-write"/&&&&&key
column="RESOURCE_ID"/&
&&&&one-to-many&
class="ment"/&
&/hibernate-mapping&
这样hibernate就会在取id的时候,从缓存中读取数据,但是到此为止,并未完成配置查询缓存!
配置查询缓存首先:&&hibernate.cache.use_query_cache=true
然后,需要在查询时设置如下代码,
Query query =
getSession().createQuery(finder.getOrigHql());
&&query.setCacheable(true);//这样才能使查询的时候调用缓存!
至此,hibernate+memcache的缓存配置完成!
不过有一点没搞明白,hibernate中的cache似乎不负责缓存分页时候,查询数量的结果,不知道是么有用对,还是什么原因,等待以后解决吧!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 memcached集群方案 的文章

 

随机推荐