做去皮儿网( 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。最后配置如下:
然后是properties配置文件:
然后就OK了。
另外封装了一个可以直接使用的cache。内部调用hazelcast。不同的cache region就简单的使用了hazelcast的map。
折腾了几天,总算告一段落。
前面一篇日志各种碰壁后,终于找到了理论上能够实现功能的两个产品: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 >
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
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。
折腾了几天,总算告一段落。