转自:http://blog.sina.com.cn/s/blog_72ef7bea0101basm.html
MyBatis支持第三方二级缓存实现,目前支持Ehcache、Hazelcast和OSCache。
GemFire不在支持的范围,但是可以通过实现org.apache.ibatis.cache.Cache接口来使用。
1、设置MyBatis的Cache全局使用开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。
<settings> <setting name="cacheEnabled" value="true"/> </settings>
2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:
<mapper namespace="org.acme.FooMapper"> <cache type="com.yqu.mybatis.caches.gemfire.GemfireCache"/> ... </mapper>
3、实现GemfireCache
package com.yqu.mybatis.caches.gemfire; import com.gemstone.gemfire.cache.AttributesFactory; import com.gemstone.gemfire.cache.CacheFactory; import com.gemstone.gemfire.cache.Region; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ibatis.cache.Cache; import org.apache.ibatis.cache.CacheException; public final class GemfireCache implements Cache { private static Region<Object, Object> mybatis_region = null; private Region<Object, Object> region = null; private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private String id; public void setId(String id) { this.id = id; } public void setRegion(Region<Object, Object> region) { this.region = region; } public Region<Object, Object> getRegion() { return region; } private static synchronized Region<Object, Object> getParentRegion() { if(mybatis_region==null) { com.gemstone.gemfire.cache.Cache cache = new CacheFactory() .set("name", "mybatis_gemfire_cache") .set("cache-xml-file", "gemfire.xml").create(); mybatis_region = cache.getRegion("mybatis_gemfire_region"); } return mybatis_region; } @SuppressWarnings({ "deprecation", "unchecked", "rawtypes" }) public GemfireCache(String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } this.id = id; region = getParentRegion().getSubregion(id); if (null == region) { AttributesFactory attrFactory = new AttributesFactory(mybatis_region.getAttributes()); region = mybatis_region.createSubregion(id, attrFactory.create()); } } public void clear() { if (null != region) { try { region.clear(); } catch (Throwable t) { throw new CacheException(t); } } } public String getId() { return this.id; } public Object getObject(Object key) { Object retVal = null; if (null != region) { if (region.containsKey(key.hashCode())) { try { retVal = region.get(key.hashCode()); } catch (Throwable t) { throw new CacheException(t); } } } return retVal; } public ReadWriteLock getReadWriteLock() { return this.readWriteLock; } public int getSize() { if (null != region) { try { return region.size(); } catch (Throwable t) { throw new CacheException(t); } } return 0; } public void putObject(Object key, Object value) { if (null != region) { try { region.put(key.hashCode(), value); } catch (Throwable t) { throw new CacheException(t); } } } public Object removeObject(Object key) { if (null != region) { try { return region.remove(key.hashCode()); } catch (Throwable t) { throw new CacheException(t); } } return null; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof Cache)) { return false; } Cache otherCache = (Cache)obj; return this.id.equals(otherCache.getId()); } @Override public int hashCode() { return this.id.hashCode(); } @Override public String toString() { return "GemfireCache{" + this.id + "}"; } }
4、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条可以通过useCache禁止使用cache:
<select id="inetAton" parameterType="string" resultType="integer" useCache=“false”> select inet_aton(#{name}) </select>
参考
http://howtodoinjava.com/2013/01/06/how-to-enable-caching-in-ibatis-using-oscache/
http://www.webdbtips.com/60455/
http://blog.csdn.net/xuezhimeng/article/details/7378096
http://grepcode.com/file/repo1.maven.org/maven2/org.mybatis.caches/mybatis-ehcache/1.0.0-RC1/org/mybatis/caches/ehcache/EhcacheCache.java
相关推荐
要启用Hibernate的二级缓存,首先需要选择一个缓存提供商,如Ehcache、Infinispan或Gemfire等。Ehcache是一种广泛使用的开源缓存解决方案,它提供了内存和磁盘存储,并且支持JMX管理。在Hibernate中配置Ehcache,...
这些包可能包括Hibernate核心库、特定的二级缓存提供者(如Ehcache、Infinispan、Gemfire等)以及它们的配置文件。例如,如果使用Ehcache作为二级缓存实现,你需要引入`hibernate-ehcache`的jar包,并在Hibernate...
在Java的持久化框架Hibernate中,二级缓存和分页功能是两个重要的优化手段,能够显著提升应用程序的性能和用户体验。下面将详细讲解这两个概念及其实际应用。 **一、Hibernate二级缓存** Hibernate一级缓存是指...
二、GemFire架构 GemFire架构主要包括三个部分: GemFire Distributed System、Region和缓存。 1. GemFire Distributed System:GemFire Distributed System是一个分布式系统,运行在多个VM上,每个VM作为一个...
手册的第二部分是关于如何开始使用vFabric GemFire,包括: 1. 在15分钟内入门GemFire的快速介绍。 2. 关于vFabric GemFire的概述。 3. vFabric GemFire的主要特性介绍。 4. 如何安装vFabric GemFire,涵盖了不同...
在分布式环境中,二级缓存可以配置为分布式缓存,如使用GemFire或Terracotta等技术,使得缓存数据能在集群中的各个节点之间共享,提高系统的可扩展性和可用性。 总结来说,Hibernate的缓存机制通过减少数据库交互,...
4. **使用缓存API**:SpringBoot应用可以通过Gemfire的API进行数据的读写操作,例如`CacheFactory`、`Region`和`CacheLoader`等。 5. **实现事件监听器**:Gemfire支持监听器机制,可以在数据变更时触发相应的回调...
#### 二、gemfire简介 gemfire是一款分布式数据管理解决方案,旨在提高应用程序性能和可扩展性。它支持高速的数据访问和处理,适用于需要实时数据分析的应用场景。gemfire的主要特点包括: - **高可用性**:...
此版本是vFabric GemFire的重要升级,它旨在提供更高效、更可靠的企业级解决方案。 【描述】"gemfire 7.0 安装包" 提供了完整的安装程序,使用户能够便捷地在自己的环境中部署和配置GemFire 7.0。这个版本包含了多...
这将启动一个名为 `server1` 的服务器,连接到 `locator1` 定位器,使用 `/etc/gphd/GemFire/SampleCode/quickstart/xml/Server.xml` 文件作为缓存配置文件,并设置 Java 虚拟机参数为 `-Xmx8192m` 和 `-Xms8192m`。...
#### 二、GemFire 分布式系统 (Distributed System) - **定义**: 由一组运行在不同VM上的GemFire实例组成。每个VM都作为一个GemFire对等体存在。 - **特点**: 各个对等体之间通过网络通信实现数据的同步与交互。 - ...
Gemfire不仅能够作为高性能的数据缓存系统,还能作为一个完整的数据库平台使用。 ### 主要特点 Gemfire的主要特点包括: 1. **高性能与低延迟**:由于数据存储在内存中,因此能够实现极快的数据访问速度。 2. **...
GemFire 是一款高性能、分布式内存数据网格系统,由 Pivotal 公司开发,主要用于构建大规模、高可用性的企业级应用程序。它提供了一个分布式的数据存储解决方案,支持实时数据访问和处理,适用于需要快速数据交换和...
1.安装 java se 1.8(jdk-8u111-...3.按http://gemfire.docs.pivotal.io/docs-gemfire/latest/getting_started/15_minute_quickstart_gfsh.html#topic_FE3F28ED18E145F787431EC87B676A76 上进行操作 4.打开REST 格式 ...
使用这样的工具可以帮助监控和分析 GemFire 集群的运行状况,包括内存使用、吞吐量、延迟等。通过定期收集和分析这些数据,我们可以识别性能瓶颈,调整配置以优化系统性能。 总的来说,理解并正确配置 GemFire OS ...
#### 二、Pivotal Gemfire 介绍 - **Pivotal GemFire**:一种分布式内存数据网格解决方案,用于存储和处理大量数据,并提供高性能的数据访问。 - **主要特点**: - **高性能**:通过内存中的数据存储来提高应用性能...
例如,Redis的命令行客户端redis-cli,或使用JMX监控Hibernate二级缓存的性能。此外,像Prometheus和Grafana这样的度量和可视化工具可以帮助我们分析和优化缓存的使用情况。 在实践中,合理配置缓存大小、设置合适...
GemFire/Geode 是一种分布式内存对象管理系统,广泛应用于大型企业级应用中。然而,在实际部署中,遇到的一些坑和难点,会导致部署失败或效率不高。以下是 GemFire/Geode 多节点集群部署踩坑大全,旨在帮助新学习 ...