做去皮兒網(wǎng)(
http://www.qupier.com),內(nèi)容管理是一個(gè)系統(tǒng),前端網(wǎng)站是一個(gè)系統(tǒng),這兩個(gè)系統(tǒng)之間獨(dú)立部署,但是緩存要能夠互通。例如后臺(tái)修改了某個(gè)消息類型的說(shuō)明,在前段網(wǎng)站上要能夠展現(xiàn)出來(lái)(使用了hibernate的查詢緩存)。其他的一些場(chǎng)景也許要緩存,例如網(wǎng)站的shiro權(quán)限信息緩存,不過(guò)這個(gè)不需要和后端系統(tǒng)互通。但是既然開(kāi)搞,也不好意思再掛著ehcache。于是一并升級(jí)。
前面一篇日志各種碰壁后,終于找到了理論上能夠?qū)崿F(xiàn)功能的兩個(gè)產(chǎn)品:gemfire和hazelcast。于是,開(kāi)始嘗試。
首先是gemfire,有l(wèi)ocator等概念。官方也看到了gemfire-hibernate模塊。但是很奇怪,各種配置各種報(bào)錯(cuò)。
然后前面一篇日志的評(píng)論里面網(wǎng)友
@吳勇智提到了hazelcast。所以也來(lái)試試。結(jié)果出奇的順利。記錄一下過(guò)程。
1.下載、運(yùn)行hazelcast
下載后隨便解壓,其實(shí)直接執(zhí)行bin/server.bat即可。但是為了能夠眼見(jiàn)為實(shí),于是首先把包中的mancenter.war找了個(gè)tomcat部署起來(lái),然后修改bin/hazelcast.xml,把management-center打開(kāi)。并指向剛部署的mancenter訪問(wèn)路徑。然后再啟動(dòng)hazelcast服務(wù):bin/server.bat。
2.hibernate二級(jí)緩存和查詢緩存
我用spring結(jié)合hibernate使用,但是沒(méi)有用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了。
另外封裝了一個(gè)可以直接使用的cache。內(nèi)部調(diào)用hazelcast。不同的cache region就簡(jiǎn)單的使用了hazelcast的map。
折騰了幾天,總算告一段落。