一:分层:
Ehcache的类层次模型主要为三层,最上层的是CacheManager,他是操作Ehcache的入口;
1:CacheManager层
1.1:获取CacheManager
CacheManager.getInstance();
或者
CacheManager cachemanager = new CacheManager();
2:Cache层
每个CacheManager都管理着多个Cache。
3:Elemenat层
而每个Cache都以一种类Hash的方式,关联着多个Elemenat。而Element则是我们用于存放要缓存内容的地方。
二:ehcache清空策略
ehcache缓存的3种清空策略:
1 FIFO,先进先出
2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
三:事件处理
可以为CacheManager添加事件监听,当对CacheManager增删Cache时,事件处理器将会得到通知。
要配置事件处理,需要通过ehcache的配置文件来完成。
四:实现步骤:
1:hibernate+EhCache配置二级缓存
1.1:Cache的多种配置方法
Javabean cache的配置有三种,下面将一一介绍,具体如下:
(1).bean中注解配置的方式: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
(2).hibernate.cfg.xml中标签配置方式: <class-cache class="" usage="" />
(3).映射文件*.hb.xml中标签配置方式: <cache usage=" />
1.2:hibernate配置文件配置
<!--
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.EhCacheRegionFactory
</property>
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
</property>
-->
<!-- hibernate3.0-3.2 cache config-->
<!--
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>
-->
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.SingletonEhCacheProvider
</property>
<!-- Enable Second-Level Cache and Query Cache Settings -->
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<property name="hibernate.cache.use_query_cache">
true
</property>
<!-- class-cache config -->
<class-cache class="michael.cache.ehcache.hibernate.EhBlogTopic"
usage="read-write" />
1.3:JavaBean注解配置
1.3.1:
@Entity
@Table(name = "MY_TB_EH_BLOG_TOPIC2")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class EhBlogTopic2 implements Serializable {
//属性和EhBlogTopic一样
//其他省略
}
1.3.2:缓存策略
•read-only ----无需修改, 可以对其进行只读缓存;
•read-write ---需要更新数据,那么使用读/写缓存比较合适;
•nonstrict-read-write ----只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,那么比较适合使用非严格读/写缓存策略;
•transactional
1.4:xxx.hbm.xml中配置缓存
<class name="EhBlogTopic3" table="MY_TB_EH_BLOG_TOPIC3">
<cache usage="read-write" />
<id name="id" type="int" unsaved-value="null">
<generator class="increment" />
</id>
.....
1.5:程序中调用
Cache myCache1 = CacheManager.getInstance().getCache("michael.cache.ehcache.hibernate.EhBlogTopic");
1.6:应用范围
1.6.1:实体类@cacheable
@Entity @Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Forest { ... }
1.6.2:集合类@cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public SortedSet<Ticket> getTickets() {
return tickets;
}