1. Ehcache 的主要特性和集群方案
EHCache EHCache 是一个纯 java 的在进程中的缓存,是 Hibernate 中默认的 CacheProvider,最小的依赖性, 全面的文档和测试,最新版本为 2.0.1。 缓存应用在多个领域并发挥作用,ehcache 可应用于数据库访问缓存,安全认证缓存,web 缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。
(1)EhCache 的主要特性有:
a) 快速; b) 简单; c)多种缓存策略;
d)缓存数据有两级:内存和磁盘,因此无需担心容量问题;
e)缓存数据会在虚拟机重启的过程中写入磁盘;
f)可以通过 RMI、可插入 API 等方式进行分布式缓存;
g) 具有缓存和缓存管理器的侦听接口;
h) 支持多缓存管理器实例,以及一个实例的多个缓存区域;
i) 提供 Hibernate 的缓存实现;
(2)EhCache 从 1.7 版本后,支持五种集群方案,分别是: a) Terracotta b)RMI c)JMS d)JGroups e)EhCache Server
2. Ehcache 的层次模型
Ehcache 的类层次模型主要为三层,最上层的是 CacheManager,他是操作 Ehcache 的入 口。我们可以通过 CacheManager.getInstance()获得一个单子的 CacheManger,或者通 过 CacheManger 的构造函数创建 一个新的 CacheManger。 每个 CacheManager 都管理着多个 Cache。而每个 Cache 都以一种类 Hash 的方式,关联着 多个 Element。 Element(键值对)则是我们用于存放要缓存内容的地方。
3. Hibernate 的二级缓存策略
Hibernate 的二级缓存策略的一般过程如下 :
1)条件查询的时候,总是发出一条 select * from table_name where .... (选择所有字段)这样的 SQL 语句查询数据库,一次获得所有的数据对象。
2) 把获得的所有数据对象根据 ID 放入到第二级缓存中。
3)当 Hibernate 根据 ID 访问数据对象的时候,首先从 Session 一级缓存中查;查不到, 如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照 ID 放 入到缓存。
4 )删除、更新、增加数据的时候,同时更新缓存。 Hibernate 的二级缓存策略,是针对于 ID 查询的缓存策略,对于条件查询则毫无作用。 为此,Hi bernate 提供了针对条件查询的 Query Cache。
4. Ehcache 的三种清空策略
(1) FIFO,first in first out,这个是大家最熟的,先进先出。
(2) LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用 的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
(3) LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又 需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将 被清出缓存。