posts - 496,comments - 227,trackbacks - 0
http://www.blogjava.net/AllanZ/archive/2013/02/22/cache-hazelcast.html

做去皮儿网(http://www.qupier.com),内容管理是一个 系统,前端网站是一个系统,这两个系统之间独立部署,但是缓存要能够互通。例如后台修改了某个消息类型的说明,在前段网站上要能够展现出来(使用了 hibernate的查询缓存)。其他的一些场景也许要缓存,例如网站的shiro权限信息缓存,不过这个不需要和后端系统互通。但是既然开搞,也不好意 思再挂着ehcache。于是一并升级。

前面一篇日志各种碰壁后,终于找到了理论上能够实现功能的两个产品:gemfire和hazelcast。于是,开始尝试。

首先是gemfire,有locator等概念。官方也看到了gemfire-hibernate模块。但是很奇怪,各种配置各种报错。

然后前面一篇日志的评论里面网友@吴勇智提到了hazelcast。所以也来试试。结果出奇的顺利。记录一下过程。

1.下载、运行hazelcast

下载后随便解压,其实直接执行bin/server.bat即可。但是为了能够眼见为实,于是首先把包中的mancenter.war找了个tomcat部署起来,然后修改bin/hazelcast.xml,把
management-center打开。并指向刚部署的mancenter访问路径。然后再启动hazelcast服务:bin/server.bat。

2.hibernate二级缓存和查询缓存

我用spring结合hibernate使用,但是没有用jpa。最后配置如下:

 1 <bean id="sessionFactory"
 2         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 3         <property name="dataSource">
 4             <ref bean="dataSource" />
 5         </property>
 6         <property name="packagesToScan">
 7             <list>
 8                 <value>com.my.**.model</value>
 9             </list>
10         </property>
11         <property name="hibernateProperties">
12             <props>
13                 <prop key="hibernate.dialect">${hibernate.dialect}</prop>
14                 <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
15                 <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
16                 <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
17                 <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
18                 <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
19                 <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
20                 <prop key="hibernate.validator.autoregister_listeners">${hibernate.validator.autoregister_listeners}</prop>
21                 <prop key="hibernate.validator.apply_to_ddl">${hibernate.validator.apply_to_ddl}</prop>
22                 <prop key="javax.persistence.validation.mode">${javax.persistence.validation.mode}</prop>
23         
24                 <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>
25                 <prop key="hibernate.cache.use_minimal_puts">${hibernate.cache.use_minimal_puts}</prop>
26                 <prop key="hibernate.cache.hazelcast.use_native_client">${hibernate.cache.hazelcast.use_native_client}</prop>
27                 <prop key="hibernate.cache.hazelcast.native_client_address">${hibernate.cache.hazelcast.native_client_address}</prop>
28                 <prop key="hibernate.cache.hazelcast.native_client_group">${hibernate.cache.hazelcast.native_client_group}</prop>
29                 <prop key="hibernate.cache.hazelcast.native_client_password">${hibernate.cache.hazelcast.native_client_password}</prop>
30             </props>
31         </property>
32     </bean>

然后是properties配置文件:

 1 hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
 2 hibernate.show_sql=true
 3 hibernate.jdbc.fetch_size=25
 4 hibernate.jdbc.batch_size=30
 5 hibernate.hbm2ddl.auto=update
 6 hibernate.cache.region.factory_class=com.hazelcast.hibernate.HazelcastCacheRegionFactory
 7 hibernate.cache.use_query_cache=true
 8 hibernate.cache.use_second_level_cache=true
 9 
10 hibernate.validator.autoregister_listeners=false
11 hibernate.validator.apply_to_ddl=false
12 javax.persistence.validation.mode=none
13 
14 hibernate.cache.use_minimal_puts=true
15 hibernate.cache.hazelcast.use_native_client=true
16 hibernate.cache.hazelcast.native_client_address=localhost
17 hibernate.cache.hazelcast.native_client_group=dev
18 hibernate.cache.hazelcast.native_client_password=dev-pass

然后就OK了。

另外封装了一个可以直接使用的cache。内部调用hazelcast。不同的cache region就简单的使用了hazelcast的map。

折腾了几天,总算告一段落。
posted on 2013-02-22 17:43 SIMONE 阅读(2814) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: