Ehcache是现在最流行纯Java开源缓存框架
中间件 面试题

中间件面试题中间件是一种用于分布式系统中的软件模块,用于增加系统的可靠性、可扩展性和可管理性。
在中间件面试中,常常会涉及到以下一些常见的问题和知识点。
本文将以问答的形式来逐一解答这些问题。
问题一:什么是中间件?中间件是一种在分布式系统中用于连接不同端点、协助信息传递和处理的软件模块。
它充当了系统中的一个逻辑层,屏蔽了底层系统的复杂性,提供了一种简化和统一的接口,使得不同的应用程序可以方便地进行通信和协作。
问题二:中间件的作用是什么?中间件的主要作用包括以下几个方面:1. 提高系统的可靠性和容错性:中间件可以通过实现故障转移、负载均衡等机制来提高系统的可靠性和容错性。
2. 改善系统的可扩展性:中间件可以利用集群、分布式缓存等技术来实现系统的横向扩展,提升系统的处理能力。
3. 统一接口和协议:中间件可以提供一套统一的接口和协议,使得不同的应用程序可以方便地进行通信和协作。
4. 简化开发和部署:中间件可以提供一些开发工具和部署工具,帮助开发人员更方便地进行应用程序开发和部署。
问题三:中间件的分类有哪些?中间件的分类可以根据不同的维度,例如功能、使用场景等进行划分。
根据功能,中间件可以分为消息中间件、数据库中间件、缓存中间件等;根据使用场景,中间件可以分为企业应用集成(EAI)中间件、云计算中间件、物联网(IoT)中间件等。
问题四:常见的消息中间件有哪些?常见的消息中间件包括:1. Apache Kafka:一个分布式流处理平台,具有高性能、高吞吐量、可持久化、容错等特性。
2. RabbitMQ:一个开源的消息中间件,支持多种协议,包括AMQP、MQTT等。
3. ActiveMQ:一个由Apache基金会支持的开源消息中间件,支持JMS协议。
4. RocketMQ:阿里巴巴开源的分布式消息中间件,具有高吞吐量、低延迟、高可靠性等特点。
问题五:数据库中间件有哪些?常见的数据库中间件包括:1. MySQL Proxy:一个MySQL数据库的代理,可以实现负载均衡、故障转移等功能。
8种缓存框架介绍

8种缓存框架介绍缓存框架是一种用于存储和管理缓存数据的软件工具或库。
它们用于提高应用程序的性能,减少数据库或其他远程资源的访问次数。
在本文中,我们将介绍8种流行的缓存框架,包括Redis、Memcached、Ehcache、Guava Cache、Caffeine、Hazelcast、Infinispan和Apache Geode。
1. Redis: Redis是一个基于内存的缓存框架,提供了丰富的数据结构和灵活的功能,包括缓存、消息队列和数据持久化。
Redis的性能出色,并且具有高可用性和扩展性。
2. Memcached: Memcached是另一个流行的基于内存的缓存框架,广泛用于提高Web应用程序的性能。
它具有简单的架构和易于使用的API。
Memcached可以在多台服务器上进行水平扩展,以提供更高的负载能力。
3. Ehcache: Ehcache是一个Java缓存框架,可以用于将缓存添加到应用程序中。
它具有简单易用的API,并提供了多种缓存策略,如LRU (最近最少使用)和FIFO(先进先出)。
Ehcache还支持磁盘持久化和分布式缓存。
4. Guava Cache: Guava Cache是Google开发的一个轻量级缓存库,可以在本地JVM中实现缓存功能。
它具有内存敏感的淘汰策略和异步加载机制,可以优化资源利用和应用程序响应时间。
5. Caffeine: Caffeine是另一个基于本地内存的缓存库,由Google开发。
它被设计为高性能、无锁的缓存框架,并且具有比Guava Cache更高的吞吐量和更低的延迟。
6. Hazelcast: Hazelcast是一个分布式缓存框架和数据网格,可以在多个服务器上共享缓存数据。
它提供了分布式数据结构和分布式计算功能,并支持高可用性和容错性。
7. Infinispan: Infinispan是另一个开源的分布式缓存框架,用于构建高性能和高可靠性的应用程序。
ehcache 磁盘缓存 默认路径

ehcache 磁盘缓存默认路径摘要:1.介绍ehcache2.磁盘缓存的作用3.默认路径的设置4.总结正文:Ehcache 是一款非常流行的Java 缓存框架,它可以帮助我们有效地提高系统的性能和响应速度。
在Ehcache 中,磁盘缓存是一个非常重要的功能,它能够将缓存数据持久化到磁盘,从而在系统重启时能够快速地加载缓存数据。
而默认路径的设置则决定了磁盘缓存文件存储的位置。
首先,我们来了解一下Ehcache。
Ehcache 是一个开源的、可嵌入的、高性能的Java 缓存框架,它提供了多种缓存策略,如LRU(最近最少使用)、LFU(最不经常使用)等。
通过使用Ehcache,我们可以轻松地实现对数据的缓存,从而降低系统对数据库的访问次数,提高系统的性能。
接下来,我们来看一下磁盘缓存的作用。
在实际应用中,有时候我们需要将缓存数据持久化到磁盘,以便在系统重启时能够快速地加载缓存数据。
例如,当我们的系统需要运行一段时间后才能获取到完整的数据时,我们可以使用磁盘缓存将这些数据保存下来,以便下次运行时能够快速地加载。
这样,就可以避免重复计算或查询数据库,从而提高系统的响应速度。
然后,我们来看一下默认路径的设置。
默认情况下,Ehcache 会将磁盘缓存文件存储在项目的工作目录下。
但是,有时候我们需要将磁盘缓存文件存储在其他路径,以便更好地管理缓存文件。
这时,我们可以通过设置Ehcache 的配置文件来实现。
具体来说,我们可以在ehcache.xml 配置文件中设置`diskPersistent`和`diskExpiry`属性,从而指定磁盘缓存文件的存储路径和过期时间。
总结一下,Ehcache 是一款非常实用的Java 缓存框架,它可以帮助我们有效地提高系统的性能和响应速度。
在Ehcache 中,磁盘缓存是一个非常重要的功能,它能够将缓存数据持久化到磁盘,从而在系统重启时能够快速地加载缓存数据。
而默认路径的设置则决定了磁盘缓存文件存储的位置。
Java中的分布式缓存框架有哪些

Java中的分布式缓存框架有哪些随着互联网应用的快速发展,分布式缓存已经成为了提高系统性能和扩展性的关键技术之一。
在Java开发领域,也涌现了许多优秀的分布式缓存框架。
本文将介绍几个Java中常用的分布式缓存框架,并分析它们的特点和适用场景。
一、EhcacheEhcache是一个开源的Java缓存框架,被广泛应用于各种Java应用中。
它提供了基于内存和磁盘的缓存机制,支持分布式部署,能够满足大规模应用的缓存需求。
Ehcache具有轻量级、易于使用和快速的特点,适合用于小型和中型的应用系统。
二、RedisRedis是一种高性能的内存数据存储系统,支持多种数据结构,可以用作分布式缓存的解决方案。
Redis提供了持久化和复制机制,可以实现高可用性和数据持久化。
同时,Redis还具有丰富的功能,如发布订阅、事务管理等,使得它不仅可以作为缓存系统,还可以用于其他用途,如消息队列等。
Redis适用于各种规模的应用系统。
三、MemcachedMemcached是一个简单的高性能分布式内存对象缓存系统。
它使用键值对的方式存储数据,提供了多种API,支持分布式部署。
Memcached具有高速的读写性能和可扩展性,通常被用于缓存数据库查询结果、页面内容等。
它适用于大规模应用和高并发场景,但需要注意的是,Memcached不提供数据持久化功能。
四、HazelcastHazelcast是一个基于Java的开源分布式缓存框架,它提供了分布式数据结构和集群管理功能。
Hazelcast采用了集中式架构,能够实现多节点之间的数据共享和同步。
它具有简单易用的特点,并提供了多种数据结构和并发算法的支持。
Hazelcast适用于构建复杂的分布式应用系统。
五、CaffeineCaffeine是一个在Java中最受欢迎的缓存库之一,它提供了高性能、无锁的内存缓存解决方案。
Caffeine采用了分片策略来管理缓存对象,提供了各种缓存策略和配置选项,可以根据实际需求进行灵活配置。
SpringBoot整合EhCache的步骤详解

SpringBoot整合EhCache的步骤详解本⽂讲解Spring Boot与EhCache的整合。
1 EhCache简介EhCache 是⼀个纯Java的进程内缓存框架,具有快速、精⼲等特点,是Hibernate中默认CacheProvider。
Ehcache是⼀种⼴泛使⽤的开源Java分布式缓存。
主要⾯向通⽤缓存,Java EE和轻量级容器。
它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,⼀个gzip缓存servlet过滤器,⽀持REST和SOAP api等特点。
2 Spring Boot整合EhCache步骤 2.1 创建项⽬,导⼊依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yiidian</groupId><artifactId>ch03_10_springboot_ehcache</artifactId><version>1.0-SNAPSHOT</version><!-- 导⼊springboot⽗⼯程. 注意:任何的SpringBoot⼯程都必须有的 --><!-- ⽗⼯程的作⽤:锁定起步的依赖的版本号,并没有真正到依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.11.RELEASE</version></parent><dependencies><!--web起步依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--springboot 集成 junit 起步依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.1.6.RELEASE</version><scope>test</scope></dependency><!-- 缓存坐标 --><!-- https:///artifact/org.springframework.boot/spring-boot-starter-cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><version>2.1.11.RELEASE</version></dependency><!-- Ehcache⽀持 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.6</version></dependency></dependencies></project>2.2 配置ehcache.xml在resources⽬录下建⽴ehcache.xml,内容如下:<ehcache xmlns:xsi="/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"><diskStore path="java.io.tmpdir"/><!-- defaultCache:默认配置 --><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></defaultCache><!-- 缓存名称为customer的配置 --><cache name="customer"maxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></cache></ehcache>参数说明name 缓存名称maxElementsInMemory 缓存最⼤个数eternal 对象是否永久有效,⼀但设置了,timeout将不起作⽤timeToIdleSeconds 设置对象在失效前的允许闲置时间(单位:秒)。
SpringBoot项目中EhCache缓存技术的实现

SpringBoot项目中EhCache缓存技术的实现作者:王萍来源:《电脑知识与技术》2021年第29期摘要:从本质上看,EhCache是一个缓存管理器,不仅可以和Hibernate配合实现缓存,也可以和其他框架比如spring boot结合,作为一个缓存管理器,该文这里举一个例子,来论述SpringBoot项目中EhCache缓存技术的实现过程,以“spring boot + mybatis + EhCache”实现本地缓存为例,探讨了SpringBoot项目中EhCache缓存技术的实现。
关键词:SpringBoot项目;EhCache;缓存技术中图分类号:TP311 文献标识码:A文章编号:1009-3044(2021)29-0079-031概述1.1 SpringBootSpringBoot是由Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通过这种方式,SpringBoot在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
简而言之,SpringBoot是当前 web 开发主流,其简化了 Spring 的配置让开发者能够更容易上手Web项目的开发。
由于Spring 的发展、微服务的发展使得SpringBoot越来越流行,已经成为JavaWeb开发的主流框架。
1.2 Spring Boot的缓存机制SpringBoot高速缓存抽象不提供实际存储,且依赖于由org. springframework.cache.Cache 和org.springframework.cache.Cache⁃ Manager接口实现的抽象。
Spring Boot根据自动配置实现合适的CacheManager,只要缓存支持通过@EnableCaching 注释启用即可。
关于ehcache 磁盘缓存 默认路径的文章

关于ehcache 磁盘缓存默认路径的文章ehcache是一个开源的Java缓存框架,它提供了内存缓存和磁盘缓存的功能。
在使用ehcache进行磁盘缓存时,默认路径是一个重要的配置项。
默认情况下,ehcache会将磁盘缓存存储在操作系统的临时目录中。
这个目录通常是由操作系统自动分配的,并且可能会在系统重启后被清空。
因此,如果我们希望持久化地保存磁盘缓存数据,就需要自定义默认路径。
为了修改默认路径,我们需要在ehcache的配置文件中进行相应的配置。
首先,我们需要找到ehcache.xml文件,这个文件通常位于项目的classpath下。
在该文件中,我们可以找到一个名为diskStore的配置项。
diskStore配置项用于指定磁盘缓存数据的存储路径。
默认情况下,它的值是\"java.io.tmpdir\",表示使用操作系统的临时目录作为默认路径。
如果我们希望修改默认路径,可以将diskStore配置项的值修改为我们期望的路径。
例如,假设我们希望将磁盘缓存数据保存在项目根目录下的一个名为\"cache\"的文件夹中。
那么我们可以将diskStore配置项修改如下:<diskStore path=\"cache\"/>这样一来,ehcache就会将磁盘缓存数据保存在项目根目录下的\"cache\"文件夹中。
需要注意的是,我们在修改默认路径时需要确保指定的路径是存在的,并且具有写入权限。
否则,ehcache将无法正常保存磁盘缓存数据。
除了在配置文件中进行配置外,我们还可以通过编程的方式来修改默认路径。
ehcache提供了一个名为DiskStorePathManager的类,通过该类可以动态地修改磁盘缓存数据的存储路径。
总之,ehcache提供了灵活的配置选项来修改磁盘缓存的默认路径。
通过合理地配置,默认路径可以被修改为我们期望的路径,从而实现对磁盘缓存数据的持久化保存。
ehcache缓存原理

ehcache缓存原理
Ehcache是一种基于Java的缓存框架,可以提供缓存服务,它的原理是将数据(对象)放入内存中存储,以提高系统的性能。
Ehcache 可以让应用程序更快地访问数据,而不必再从磁盘或数据库获取它。
Ehcache的核心是一种叫做“缓存”的技术,它将数据保存在快速访问的内存中,使其可以快速访问。
这种技术可以大大提高系统性能,并减少CPU和磁盘空间的使用率。
Ehcache使用一种叫做“淘汰”(eviction)的机制来管理它的缓存,也就是如果缓存中的数据量超过一定量,就会将相对不常访问的数据从缓存中移除掉。
这样可以节省很多内存,同时能够更快地访问缓存中的数据。
Ehcache还可以通过一种称为“缓存链接”(cache-chaining)的机制,来连接不同的缓存,以便在系统中存储更多的数据。
这样,当缓存中的数据超过一定量时,将自动向缓存链接中添加新的缓存,从而实现更好的数据存储空间。
Ehcache还支持持续性分区(persistent partitioning),这种技术可以将系统中的缓存数据分割成多个部分,每个部分存储的数据不会超过一定的大小,避免缓存溢出的现象。
另外,Ehcache还提供了一种称为“内存重用”(memory reclamation)的技术,目的是当系统中数据量变大时,可以释放系统中已经不再使用的缓存数据,以便用于存储新的数据。
总的来说,Ehcache的核心原理就是将系统中的数据存储在快速
访问的内存中,以提高系统的性能,同时也可以通过淘汰、缓存链接、持久性分区和内存重用等技术来管理Ehcache的缓存。
Ehcache的优势在于其可靠性高、支持多种数据格式以及用于整个系统的可扩展性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ehcache是现在最流行的纯Java开源缓存框架2014-12-22 13:28 37723人阅读评论(0) 收藏举报分类:java(405)c:\t _blankEhcache是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大,最初知道它,是从hibernate的缓存开始的。
网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面的问题,请自行google;对于API,官网上介绍已经非常清楚,请参见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍和分析EhCache的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。
一、特性一览,来自官网,简单翻译一下:1、快速轻量过去几年,诸多测试表明Ehcache是最快的Java缓存之一。
Ehcache的线程机制是为大型高并发系统设计的。
大量性能测试用例保证Ehcache在不同版本间性能表现得一致性。
很多用户都不知道他们正在用Ehcache,因为不需要什么特别的配置。
API易于使用,这就很容易部署上线和运行。
很小的jar包,Ehcache 2.2.3才668kb。
最小的依赖:唯一的依赖就是SLF4J了。
2、伸缩性缓存在内存和磁盘存储可以伸缩到数G,Ehcache为大数据存储做过优化。
大内存的情况下,所有进程可以支持数百G的吞吐。
为高并发和大型多CPU服务器做优化。
线程安全和性能总是一对矛盾,Ehcache的线程机制设计采用了Doug Lea的想法来获得较高的性能。
单台虚拟机上支持多缓存管理器。
通过Terracotta服务器矩阵,可以伸缩到数百个节点。
3、灵活性Ehcache 1.2具备对象API接口和可序列化API接口。
不能序列化的对象可以使用除磁盘存储外Ehcache的所有功能。
除了元素的返回方法以外,API都是统一的。
只有这两个方法不一致:getObjectValue和getKeyValue。
这就使得缓存对象、序列化对象来获取新的特性这个过程很简单。
支持基于Cache和基于Element的过期策略,每个Cache的存活时间都是可以设置和控制的。
提供了LRU、LFU和FIFO缓存淘汰算法,Ehcache 1.2引入了最少使用和先进先出缓存淘汰算法,构成了完整的缓存淘汰算法。
提供内存和磁盘存储,Ehcache和大多数缓存解决方案一样,提供高性能的内存和磁盘存储。
动态、运行时缓存配置,存活时间、空闲时间、内存和磁盘存放缓存的最大数目都是可以在运行时修改的。
4、标准支持Ehcache提供了对JSR107 JCACHE API最完整的实现。
因为JCACHE在发布以前,Ehcache的实现(如net.sf.jsr107cache)已经发布了。
实现JCACHE API有利于到未来其他缓存解决方案的可移植性。
Ehcache的维护者Greg Luck,正是JSR107的专家委员会委员。
5、可扩展性监听器可以插件化。
Ehcache 1.2提供了CacheManagerEventListener和CacheEventListener接口,实现可以插件化,并且可以在ehcache.xml里配置。
节点发现,冗余器和监听器都可以插件化。
分布式缓存,从Ehcache 1.2开始引入,包含了一些权衡的选项。
Ehcache的团队相信没有什么是万能的配置。
实现者可以使用内建的机制或者完全自己实现,因为有完整的插件开发指南。
缓存的可扩展性可以插件化。
创建你自己的缓存扩展,它可以持有一个缓存的引用,并且绑定在缓存的生命周期内。
缓存加载器可以插件化。
创建你自己的缓存加载器,可以使用一些异步方法来加载数据到缓存里面。
缓存异常处理器可以插件化。
创建一个异常处理器,在异常发生的时候,可以执行某些特定操作。
6、应用持久化在VM重启后,持久化到磁盘的存储可以复原数据。
Ehcache是第一个引入缓存数据持久化存储的开源Java缓存框架。
缓存的数据可以在机器重启后从磁盘上重新获得。
根据需要将缓存刷到磁盘。
将缓存条目刷到磁盘的操作可以通过cache.flush()方法来执行,这大大方便了Ehcache的使用。
7、监听器缓存管理器监听器。
允许注册实现了CacheManagerEventListener接口的监听器:notifyCacheAdded()notifyCacheRemoved()缓存事件监听器。
允许注册实现了CacheEventListener接口的监听器,它提供了许多对缓存事件发生后的处理机制:notifyElementRemoved/Put/Updated/Expired8、开启JMXEhcache的JMX功能是默认开启的,你可以监控和管理如下的MBean:CacheManager、Cache、CacheConfiguration、CacheStatistics9、分布式缓存从Ehcache 1.2开始,支持高性能的分布式缓存,兼具灵活性和扩展性。
分布式缓存的选项包括:通过Terracotta的缓存集群:设定和使用Terracotta模式的Ehcache缓存。
缓存发现是自动完成的,并且有很多选项可以用来调试缓存行为和性能。
使用RMI、JGroups或者JMS来冗余缓存数据:节点可以通过多播或发现者手动配置。
状态更新可以通过RMI连接来异步或者同步完成。
Custom:一个综合的插件机制,支持发现和复制的能力。
可用的缓存复制选项。
支持的通过RMI、JGroups或JMS进行的异步或同步的缓存复制。
可靠的分发:使用TCP的内建分发机制。
节点发现:节点可以手动配置或者使用多播自动发现,并且可以自动添加和移除节点。
对于多播阻塞的情况下,手动配置可以很好地控制。
分布式缓存可以任意时间加入或者离开集群。
缓存可以配置在初始化的时候执行引导程序员。
BootstrapCacheLoaderFactory抽象工厂,实现了BootstrapCacheLoader接口(RMI实现)。
缓存服务端。
Ehcache提供了一个Cache Server,一个war包,为绝大多数web容器或者是独立的服务器提供支持。
缓存服务端有两组API:面向资源的RESTful,还有就是SOAP。
客户端没有实现语言的限制。
RESTful缓存服务器:Ehcached的实现严格遵循RESTful面向资源的架构风格。
SOAP缓存服务端:Ehcache RESTFul Web Services API暴露了单例的CacheManager,他能在ehcache.xml或者IoC容器里面配置。
标准服务端包含了内嵌的Glassfish web容器。
它被打成了war包,可以任意部署到支持Servlet 2.5的web容器内。
Glassfish V2/3、Tomcat 6和Jetty 6都已经经过了测试。
10、搜索标准分布式搜索使用了流式查询接口的方式,请参阅文档。
11、Java EE和应用缓存为普通缓存场景和模式提供高质量的实现。
阻塞缓存:它的机制避免了复制进程并发操作的问题。
SelfPopulatingCache在缓存一些开销昂贵操作时显得特别有用,它是一种针对读优化的缓存。
它不需要调用者知道缓存元素怎样被返回,也支持在不阻塞读的情况下刷新缓存条目。
CachingFilter:一个抽象、可扩展的cache filter。
SimplePageCachingFilter:用于缓存基于request URI和Query String的页面。
它可以根据HTTP request header的值来选择采用或者不采用gzip压缩方式将页面发到浏览器端。
你可以用它来缓存整个Servlet页面,无论你采用的是JSP、velocity,或者其他的页面渲染技术。
SimplePageFragmentCachingFilter:缓存页面片段,基于request URI和Query String。
在JSP中使用jsp:include标签包含。
已经使用Orion和Tomcat测试过,兼容Servlet 2.3、Servlet 2.4规范。
Cacheable命令:这是一种老的命令行模式,支持异步行为、容错。
兼容Hibernate,兼容Google App Engine。
基于JTA的事务支持,支持事务资源管理,二阶段提交和回滚,以及本地事务。
12、开源协议Apache 2.0 license二、Ehcache的加载模块列表,他们都是独立的库,每个都为Ehcache添加新的功能,可以在此下载:•ehcache-core:API,标准缓存引擎,RMI复制和Hibernate支持•ehcache:分布式Ehcache,包括Ehcache的核心和Terracotta的库•ehcache-monitor:企业级监控和管理•ehcache-web:为Java Servlet Container提供缓存、gzip压缩支持的filters •ehcache-jcache:JSR107 JCACHE的实现•ehcache-jgroupsreplication:使用JGroup的复制•ehcache-jmsreplication:使用JMS的复制•ehcache-openjpa:OpenJPA插件•ehcache-server:war内部署或者单独部署的RESTful cache server•ehcache-unlockedreadsview:允许Terracotta cache的无锁读•ehcache-debugger:记录RMI分布式调用事件•Ehcache for Ruby:Jruby and Rails支持Ehcache的结构设计概览:三、核心定义:cache manager:缓存管理器,以前是只允许单例的,不过现在也可以多实例了cache:缓存管理器内可以放置若干cache,存放数据的实质,所有cache都实现了Ehcache接口element:单条缓存数据的组成单位system of record(SOR):可以取到真实数据的组件,可以是真正的业务逻辑、外部接口调用、存放真实数据的数据库等等,缓存就是从SOR中读取或者写入到SOR中去的。
代码示例:Java代码1.CacheManager manager = CacheManager.newInstance("src/config/ehcache.xml");2.manager.addCache("testCache");3.Cache test = singletonManager.getCache("testCache");4.test.put(new Element("key1", "value1"));5.manager.shutdown();当然,也支持这种类似DSL的配置方式,配置都是可以在运行时动态修改的:Java代码1.Cache testCache = new Cache(2.new CacheConfiguration("testCache", maxElements)3. .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)4. .overflowToDisk(true)5. .eternal(false)6. .timeToLiveSeconds(60)7. .timeToIdleSeconds(30)8. .diskPersistent(false)9. .diskExpiryThreadIntervalSeconds(0));事务的例子:Java代码1.Ehcache cache = cacheManager.getEhcache("xaCache");2.transactionManager.begin();3.try {4. Element e = cache.get(key);5. Object result = complexService.doStuff(element.getValue());6. cache.put(new Element(key, result));7. complexService.doMoreStuff(result);8. mit();9.} catch (Exception e) {10. transactionManager.rollback();11.}四、一致性模型:说到一致性,数据库的一致性是怎样的?不妨先来回顾一下数据库的几个隔离级别:未提交读(Read Uncommitted):在读数据时不会检查或使用任何锁。