Hazelcast作为hibernate缓存和业务缓存

2024-08-22 23:38

本文主要是介绍Hazelcast作为hibernate缓存和业务缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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。

折腾了几天,总算告一段落。

这篇关于Hazelcast作为hibernate缓存和业务缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097731

相关文章

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

防止缓存击穿、缓存穿透和缓存雪崩

使用Redis缓存防止缓存击穿、缓存穿透和缓存雪崩 在高并发系统中,缓存击穿、缓存穿透和缓存雪崩是三种常见的缓存问题。本文将介绍如何使用Redis、分布式锁和布隆过滤器有效解决这些问题,并且会通过Java代码详细说明实现的思路和原因。 1. 背景 缓存穿透:指的是大量请求缓存中不存在且数据库中也不存在的数据,导致大量请求直接打到数据库上,形成数据库压力。 缓存击穿:指的是某个热点数据在

PHP APC缓存函数使用教程

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。(Linux APC扩展安装) 系统缓存 它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量C

缓存策略使用总结

缓存是提高系统性能的最简单方法之一。相对而言,数据库(or NoSQL数据库)的速度比较慢,而速度却又是致胜的关键。 如果使用得当,缓存可以减少相应时间、减少数据库负载以及节省成本。本文罗列了几种缓存策略,选择正确的一种会有很大的不同。缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如: 系统是写多读少的吗?(例如基于时间的日志)数据是否是只写入一次并被读取多次?(例如用户配

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意