缓存学习(一):EhCache

本文详细介绍了EhCache的使用,包括基本配置、XML配置、硬编码配置和直接创建Cache的方式。此外,文章还探讨了EhCache与Spring的结合,包括2.x版本的EhCacheCacheManager和3.x版本的JCacheCacheManager。最后,文章讨论了EhCache作为Hibernate和Mybatis二级缓存的配置和实践。
摘要由CSDN通过智能技术生成

目录

1.基本使用

1.1 XML配置

1.2 硬编码

1.3 直接创建Cache

2.结合Spring使用

2.1 使用EhCacheCacheManager —— 仅支持2.x版本

2.2 使用JCacheCacheManager —— 仅支持3.x版本

3.作为二级缓存使用

3.1 Hibernate:同时支持EhCache2、3

3.2 Mybatis:仅支持2.x


EhCache是一个以Java实现的开源本地缓存框架,但也支持分布式部署。它符合JSR107标准,具有简单、高性能的特点,官方宣称是为大型高并发系统设计,广泛地与Hibernate、Spring等开源框架结合使用。由于EhCache 3.x分布式部署需要结合Terracotta服务器使用,这里就不再介绍了。

EhCache目前的最新版本是3.7.0(需要Java 8以上版本),文中除非显式说明,否则本文的介绍均基于该版本。

1.基本使用

使用时,需要使用Maven引入ehcache包:

<dependency>
  <groupId>org.ehcache</groupId>
  <artifactId>ehcache</artifactId>
  <version>3.7.0</version>
</dependency>

EhCache的核心是CacheManager,每个CacheManager可包含多个Cache。因此,EhCache的创建过程就是CacheManager和Cache的配置过程,3.x版本有如下几种配置方式:

1.1 XML配置

首先需要创建一个XML配置文件,这里在resource目录下创建名为config.xml的文件,以下是示例配置:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache:config
        xmlns:ehcache="http://www.ehcache.org/v3">
    <ehcache:cache alias="myCache">
        <ehcache:key-type>java.lang.String</ehcache:key-type>
        <ehcache:value-type>java.lang.String</ehcache:value-type>
        <ehcache:expiry>
            <ehcache:tti unit="minutes">20</ehcache:tti>
        </ehcache:expiry>
        <ehcache:heap>200</ehcache:heap>
    </ehcache:cache>
</ehcache:config>

config标签代表一个CacheManager定义,cache代表一个Cache定义,key-type和value-type分别代表键和值的类型,这里全部是String类型,expiry代表缓存存活时间设置,这里设置了TTI为20分钟,heap代表缓存容量,默认为entries,即存放多少个缓存对象,如果选择B、KB、MB、GB等,就是不限数量,但是限制缓存总大小。

其他的标签及其作用可参见:XML配置

然后读取配置文件,创建缓存管理器和缓存对象:

URL url=getClass().getResource("config.xml");
Configuration conf=new XmlConfiguration(url);
CacheManager cacheManager=CacheManagerBuilder.newCacheManager(conf);
cacheManager.init();
Cache cache=cacheManager.getCache("myCache",String.class,String.class);
cache.put("hello","world");
System.out.println(cache.get("hello"));
cacheManager.close();

该段代码会输出“world”。

因为都是存储键值对,所以Cache的API和Map差不多。CacheManager需要显式关闭,也可以使用try-resource形式,实现自动关闭:

try(CacheManager cacheManager=CacheManagerBuilder.newCacheManager(conf)){
    ...
}catch(Exception e){
    ...
}

1.2 硬编码

XML配置虽然容易理解,但也很麻烦,尤其是Cache的键、值类型已经在XML中定义过了,实例化时还要再定义一次,多此一举,完全可以舍弃XML,直接使用硬编码形式配置缓存,下面的配置效果和上面的XML配置完全一致:

CacheConfiguration conf=CacheConfigurationBuilder
    .newCacheConfigurationBuilder(String.class,String.class, ResourcePoolsBuilder.heap(200L))
    .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofMinutes(20L)))
    .build();
CacheManager manager=CacheManagerBuilder.newCacheManagerBuilder()
    .withCache("myCache",conf)
    .build(true);
Cache cache=manager.getCache("myCache",String.class,String.class);
cache.put("hello","world");
System.out.println(cache.get("hello"));
manager.close();

实际上就是把XML配置变成了一个CacheConfiguration对象而已,使用起来还是挺麻烦的

1.3 直接创建Cache

如果是创建大量有共性的缓存,使用前两种方式或许还不错,但是如果创建的缓存不多,或者没什么共同点,那么还不如在创建Cache的时候再指定其特性,可以使用UserManagedCache:

UserManagedCache cache= UserManagedCacheBuilder
    .newUserManagedCacheBuilder(String.class,String.class)
    .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofMinutes(20L)))
    .withResourcePools(ResourcePoolsBuilder.heap(200L))
    .build(true);
cache.put("hello","world");
System.out.println(cache.get("hello"));

可以看到,这种方式代码量少了不少,看着很简洁。

2.结合Spring使用

缓存一般不会单独使用,而是配合其它框架,EhCache最常见的使用场景就是作为Hibernate等ORM组件的二级缓存,不过和Spring的结合也不少见,Spring Cache就为其提供了支持。

2.1 使用EhCacheCacheManager —— 仅支持2.x版本</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值