关于Hibernate二级缓存第三方插件EHCache缓存

Ehcache是一种开源的基于标准的缓存,用于提高性能和减轻数据库负荷,是当今使用最广泛的基于java的缓存。

    • 缓存:维基词典将缓存定义为"存储将要被使用的东西,并且可以被快速检索"。缓存是一组临时数据,要么是其它地方的数据副本,或者是计算的结果。已经在缓存中的数据可以在时间和资源方面以最小的成本重复访问。
    • 缓存条目:缓存条目由一个键和它在缓存中的映射数据值组成。
    • 缓存命中:当从缓存请求数据元素时,对于给定的键存在元素,这被称为缓存命中。
    • 缓存未命中:当从缓存请求数据元素时,对于给定的键不存在元素,这被称为缓存未命中。
    • 记录系统:数据的权威性来源,存储层中的最底层。它通常是一种传统的数据库,可能是一个专门的文件系统或者其他可靠的长期存储。
    • 驱逐:从缓存中删除条目,以便为较新的条目腾出空间(通常当缓存耗尽了数据存储容量时)。
    • 过期:经过一段时间后,从缓存中删除条目,通常是为了避免缓存中的过时数据。
    • 热数据:最近被应用程序使用的数据很可能很快就会被再次访问。这样的数据被认为是热门的。缓存可能会尝试将最热门的数据保存在速度最快的区域,同时尝试选择最不热门的数据来进行驱逐。

(1)数据新鲜度

数据新鲜度是指数据的副本(例如,在缓存中)与数据的源版本(例如,在记录系统中)相比的最新情况。一份过期的副本被认为是不同步的(或者很可能是不同步的)。

(2)缓存条目过期

Ehcache可以帮助您减少使用过期数据的可能性。在您的应用中配置缓存过期的方式和时间,一旦过期,该条目将自动从缓存中删除。目前支持的3种过期方式:

  1. no expiry:永不过期
  2. time-to-live:在条目创建后,超过了设定的时间将作过期处理
  3. time-to-idle:如果条目的最后一次访问时间离当前的时间超过了设定的时间长度,它将会作过期处理

分层缓存的概念

(1)存储层介绍

Storage Tiers

Ehcache 3, as in previous versions, offers a tiering model to allow storing increasing amounts of data on slower tiers (which are generally more abundant).

The idea is that resources related to faster storage are more rare, but are located where the ‘hottest‘ data is preferred to be. Thus less-hot (less frequently used) data is moved to the more abundant but slower tiers. Hotter data is moved onto the faster tiers.

译:Ehcache 3和以前的版本一样,提供了一种分层模型,允许在较慢的层上存储更多的数据。

速度更快的存储层一般资源更少,但位于"最热门"数据的位置。因此,不太常用的数据被转移到更丰富但速度较慢的层,而更常用的数据被转移到更快的层。

You can configure Ehcache to use various data storage areas. When a cache is configured to use more than one storage area, those areas are arranged and managed as tiers. They are organized in a hierarchy, with the lowest tier (farther) being called the authority tier and the others being part of the caching tier (nearer, also called near cache) . The caching tier can itself be composed of more than one storage area. The hottest data is kept in the caching tier, which is typically less abundant but faster than the authority tier. All the data is kept in the authority tier, which is slower but more abundant.

Data stores supported by Ehcache include:

  • On-Heap Store - Utilizes Java’s on-heap RAM memory to store cache entries. This tier utilizes the same heap memory as your Java application, all of which must be scanned by the JVM garbage collector. The more heap space your JVM utilizes, the more your application performance will be impacted by garbage collection pauses. This store is extremely fast, but is typically your most limited storage resource.
  • Off-Heap Store - Limited in size only by available RAM. Not subject to Java garbage collection (GC). Is quite fast, yet slower than the On-Heap Store because data must be moved to and from the JVM heap as it is stored and re-accessed.
  • Disk Store - Utilizes a disk (file system) to store cache entries. This type of storage resource is typically very abundant but much slower than the RAM-based stores. As for all application using disk storage, it is recommended to use a fast and dedicated disk to optimize the throughput.
  • Clustered Store - This data store is a cache on a remote server. The remote server may optionally have a failover server providing improved high availability. Since clustered storage comes with performance penalties due to such factors as network latency as well as for establishing client/server consistency, this tier, by nature, is slower than local off-heap storage.

译:存储层中的最底层被命名为权威层(authority tier ,资源量最丰富的层),一般是磁盘存储层(Disk Tier)或集群存储层(Clustered Tier),其它更近访问更快的层有堆内存储层(Heap tier)和堆外存储层(Off Heap Tier)

Ehcache支持的数据存储包括:

  • 堆内存储 - 利用Java的堆内存来存储缓存条目。使用与Java应用程序相同的由JVM垃圾收集器管理的堆内存。JVM使用的堆空间越多,应用程序性能受到的垃圾收集暂停影响越大。此存储最快但空间最小。
  • 堆外存储 - 只有可用RAM限制大小。不受Java垃圾收集(GC)的影响。它的速度非常快,但比堆内存储要慢,因为数据的存储和重新访问的都要经过堆内存储层。
  • 磁盘存储 - 利用磁盘(文件系统)来存储缓存条目。这种类型的存储资源通常非常丰富,但是比基于ram的存储要慢得多。对于使用磁盘存储的所有应用程序,建议使用一个快速且专用的磁盘来优化吞吐量。
  • 集群存储 - 这个数据存储是远程服务器上的一个缓存。远程服务器可以有选择地提供一个故障转移服务器使可用性更高。集群存储由于网络延迟和建立客户机/服务器一致性等因素而受到性能的惩罚,因此这一层的性能比本地的堆外存储要慢。

来自官方:http://www.ehcache.org/documentation/3.4/caching-concepts.html#storage-tiers

缓存操作在多存储层中的序列流程图

Sequence Flow for Cache Operations with Multiple Tiers

In order to understand what happens for different cache operations when using multiple tiers, here are examples of Put and Get operations. The sequence diagrams are oversimplified but still show the main points.

Figure 2. Multiple tiers using Put

Figure 3. Multiple tiers using Get

You should then notice the following:

  • When putting a value into the cache, it goes straight to the authoritative tier, which is the lowest tier.
  • A following get will push the value upwards in the caching tiers.
  • Of course, as soon as a value is put in the authoritative tier, all higher-level caching tiers are invalidated.
  • A full cache miss (the value isn’t on any tier) will always go all the way down to the authoritative tier.

译:为了理解在使用多个层时不同的缓存操作会发生什么情况,图为Put和Get操作的示例。序列图过于简化,但仍然显示了要点。

你应该注意到以下几点:

  • 当将一个值放入缓存时,它会直接转到权威层,这是最底层。
  • get将在缓存层中向上推送值。
  • 一旦将值放入到权威层中,所有更近的缓存层都将失效。
  • 缓存丢失(值不在任何层上)总是会一直向下获取直到权威层。

来自官方:http://www.ehcache.org/documentation/3.4/tiering.html#multi-tier-sequence-flow

时间: 2024-11-10 18:07:14

关于Hibernate二级缓存第三方插件EHCache缓存的相关文章

Hibernate二级缓存 --Hibernate框架

Hibernate本身只提供了二级缓存的规范,但并未实现,所以需要第三方缓存插件的支持.常用的二级缓存第三方插件有:EHCache.Memcached.OSCache.SwarmCache.JBossCache.这些插件的功能的侧重均有所不同.下面一图说明了插件的在实际应用中的区别: 本例采用EHCache插件. 1.首先,导入需要EHCache插件相关的Jar包.(可通过Hibernate框架的lib\optional\ehcache目录中找到) 2.修改主配置文件hibernate.cfg.

Hibernate二级缓存以及ehcache的搭建配置

前言 这次主要复习Hibernate的二级缓存的相关知识,配置以及使用.二级缓存主要采用第三方的ehcache,也将介绍ehcache缓存的相关配置属性以及在项目中的搭建,具体的项目查看下一篇的 Maven搭建SpringMVC+Hibernate项目详解 的文章.(之前使用过Hibernate的二级缓存,但是没自己搭建和研究过,现在花了半天时间搭建了一下,写下来供大家参考) 1.Hibernate二级缓存 Hibernate包括两个级别的缓存: 1.一级缓存:默认总是启用的session级别的

hibernate二级缓存ehcache

<!-----------------hibernate二级缓存ehcache------------------------->hibernate配置 <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.cache.use_second_level_cache">true</prop> <prop

Hibernate二级缓存的使用

1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率更低. 我们这里使用的二级缓存是通过ehcache第三方插件实现的. 1.1配置Hibernate.cfg.xml 启用class缓存: <property name="hibernate.cache.provider_class"> org.hibernate.cache.E

Hibernate学习---第十五节:hibernate二级缓存

1.二级缓存所需要的 jar 包 这三个 jar 包实在 hibernate 解压缩文件夹的 lib\optional\ehcache 目录下 2.配置 ehcache.xml <ehcache> <!-- 指定当缓存数据超出规定缓存大小的时候,超出的缓存数据写入到磁盘的位置 --> <diskStore path="D:/cache/tmp"/> <!-- maxInMemory - 允许在二级缓存中的持久化对象数量 eternal - 缓存

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Hibernate二级缓存

第一级缓存:事务范围的缓存.Session缓存.存放元数据和预定义SQL.只读缓存. 第二级缓存:进程范围或者集群范围.由SessionFactory负责管理.SessionFactory的外置缓存.SessionFactory这个级别维护的缓存.二级缓存是针对整个应用而不是某个特定的session. Session 如何判断持久化对象的状态的改变呢? Session 加载对象后会为对象值类型的属性复制一份快照.当Session 清理缓存时,比较当前对象和它的快照就可以知道那些属性发生了变化.

缓存插件 EHCache

EHCache是来自sourceforge(http://ehcache.sourceforge.net/)的开源项目,也是纯Java实现的简单.快速的Cache组件. 下载jar包 Ehcache 对象.数据缓存:http://ehcache.org/downloads/destination?name=ehcache-core-2.5.2-distribution.tar.gz&bucket=tcdistributions&file=ehcache-core-2.5.2-distrib

Hibernate ——二级缓存

一.Hibernate 二级缓存 1.Hibernate 二级缓存是 SessionFactory 级别的缓存. 2.二级缓存分为两类: (1)Hibernate内置二级缓存 (2)外置缓存,可配置的,可插拨的,外置缓存中的数据是数据库数据的复制. 3.二级缓存的并发访问策略 (1)两个并发的事务同时访问持久层的缓存的相同数据时,也有可能出现并发问题. (2)二级缓存可以设定以下 4 中并发访问策略,每一种对应一种事务隔离级别. 非严格读写(Nonstrict-read-write):不保证缓存