创建cacheManager 和 cache的几种方式

时间:2022-06-26 20:34:29

    Ehcache是用来管理缓存的一个工具,其缓存的数据可以是存放在内存里面的,也可以是存放在硬盘上的。其核心是CacheManager,一切Ehcache的应用都是从CacheManager开始的。它是用来管理Cache(缓存)的,一个应用可以有多个CacheManager,而一个CacheManager下又可以有多个CacheCache内部保存的是一个个的Element,而一个Element中保存的是一个keyvalue的配对,相当于Map里面的一个Entry


第一种:使用无参的构造函数:归根到底是寻找类路径下默认的配置文件来 初始或cacheManager;(Ehcache首先会到类根路径下寻找一个叫ehcache.xml的配置文件来配置CacheManager,如果没有找到该文件,则会加载CacheManager的默认配置ehcache-failsafe.xml文件,这个文件是在ehcache.jar里面的

CacheManager cacheManager = new CacheManager(); 

第二种:用configuration作为参数,

首次创建一个configuration, 然后在添加缓存的配置信息cacheConfiguration 

Configuration con = new Configuration()

CacheConfiguration cache = new CacheConfiguration().name("test");//创建一个叫test的缓存

/cache.maxBytesLocalHeap(100, MemoryUnit.MEGABYTES);

con.addCache(cache)

CacheManager cacheManager= new CacheManager(con);

Cache cache = cacheManager.getCache("test");

cache.put(new Element("test""test"));

System.out.println(cache.get("test").getObjectValue());

:第三种通过流的方式:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("/ehcache.xml")

CacheManager cacheManager = new CacheManager(is);


第四种xml格式的配置文件对应的路径作为参数

CacheManager cacheManager = new CacheManager("src/main/resources/ehcache/ehcache.xml")

第五种:xml格式的配置对应的URL作为参数:

Url url = this.getClass.getResource("/ehcache.xml")

CacheManager cacheManager = new CacheManager(url); 



下面是静态方法创建CacheManager: CacheManager cacheManager = CacheManager.create();

  1.  //以默认配置创建一个CacheManager单例  
  2.    CacheManager cacheManager = CacheManager.create();  
  3.     
  4.    //以config对应的配置创建CacheManager单例  
  5.    Configuration config = ...;//以某种方式获取的Configuration对象  
  6.    cacheManager = CacheManager.create(config);  
  7.     
  8.    //以configurationFileName对应的xml文件定义的配置创建CacheManager单例  
  9.    String configurationFileName = ...;//xml配置文件对应的文件名称,包含路径  
  10.    cacheManager = CacheManager.create(configurationFileName);  
  11.     
  12.    //以is对应的配置信息创建CacheManager单例  
  13.    InputStream is = ...; //以某种方式获取到的Xml配置信息对应的输入流  
  14.    cacheManager = CacheManager.create(is);  
  15.     
  16.    //以URL对应的配置信息创建CacheManager单例  
  17.    URL url = ...;  //以某种方式获取到的Xml配置信息对应的URL  
  18.    cacheManager = CacheManager.create(url);  

newInstance()方法

       在CacheManager内部一共定义有五个newInstance()方法,分别对应于CacheManager的五个构造方法。在调用newInstance()方法时,Ehcache会查看CacheManager内部是否保存有曾经新建的且同名的CacheManager,如果有则返回该对象,否则构建一个新的CacheManager对象进行返回。所以newInstance()方法并不一定会产生一个新的对象。

Java代码  创建cacheManager 和 cache的几种方式
  1. public void test() {  
  2.    //以默认配置创建一个CacheManager  
  3.    CacheManager cacheManager = CacheManager.newInstance();  
  4.     
  5.    //以config对应的配置创建CacheManager  
  6.    Configuration config = ...;//以某种方式获取的Configuration对象  
  7.    cacheManager = CacheManager.newInstance(config);  
  8.     
  9.    //以configurationFileName对应的xml文件定义的配置创建CacheManager  
  10.    String configurationFileName = ...;//xml配置文件对应的文件名称,包含路径  
  11.    cacheManager = CacheManager.newInstance(configurationFileName);  
  12.     
  13.    //以is对应的配置信息创建CacheManager  
  14.    InputStream is = ...; //以某种方式获取到的Xml配置信息对应的输入流  
  15.    cacheManager = CacheManager.newInstance(is);  
  16.     
  17.    //以URL对应的配置信息创建CacheManager  
  18.    URL url = ...;  //以某种方式获取到的Xml配置信息对应的URL  
  19.    cacheManager = CacheManager.newInstance(url);  
  20. }  


关闭: cacheManager:CacheManagershutdown()方法来将当前CacheManager进行关闭、、
接下来对cache Ehcache里定义了一个对缓存进行处理的接口:Ehcache;Cache是接口的实现类;Cache是CacheManager进行管理 CacheManager生成的就是一个Cache对象。Cache里面保存的是一个个的Element对象,这些对象通常都是保存在MemoryStore里面的,但也可以溢出到DiskStoreElement里面存放的是一个keyvalue的配对,其中keyvalue都是ObjectCache的创建可以事先在创建CacheManager的时候定义好,也可以在之后调用CacheManager实例的相关方法进行Cache的添加。Cache是线程安全的。
  1. @Test  
  2. public void test() {  
  3.    CacheManager cacheManager = CacheManager.create();  
  4.    //以默认配置添加一个名叫cacheName的Cache。  
  5.    cacheManager.addCache("cacheName");  
  6.    Cache cache = cacheManager.getCache("cacheName");  
  7.    Element ele = new Element("key""value");  
  8.    //把ele放入缓存cache中  
  9.    cache.put(ele);  
  10. }  

 

  Cache的创建

       Cache的创建主要有两种方式,一种是通过Cache的构造方法创建,另一种是通过CacheManager创建。Cache中定义了一系列的构造方法,这里我们拿常用的利用CacheConfiguration来构造Cache做个示例。

Java代码  创建cacheManager 和 cache的几种方式
  1. @Test  
  2. public void cache() {  
  3.    //内存中保存的Element的最大数量  
  4.    int maxEntriesLocalHeap = 10000;  
  5.    CacheConfiguration cacheConfiguration = new CacheConfiguration("cacheName", maxEntriesLocalHeap);  
  6.    cacheConfiguration.overflowToOffHeap(false);  
  7.    Cache cache = new Cache(cacheConfiguration);  
  8.    //使用默认配置创建CacheManager  
  9.    CacheManager cacheManager = CacheManager.create();  
  10.    //只有添加到CacheManager中的Cache才是有用的  
  11.    cacheManager.addCache(cache);  
  12.    cache.put(new Element("key""value"));  
  13.    System.out.println(cache.get("key"));  
  14. }  

 

 

       注意:通过使用Cache的构造方法直接new出来的Cache一定要添加到CacheManager中才能使用。

       通过CacheManager创建的Cache是指我们把Cache定义在CacheManager对应的配置信息里面,这样在创建CacheManager的时候也会把其中定义的Cache进行实例化并添加到对应的CacheManager中。根据构建CacheManager的方式不同,我们把Cache定义在CacheManager的配置信息中的方式也不同。总的来说有两种方式,一种是定义的对应的Xml格式的配置信息中,另一种是通过Configuration构建CacheManager时把CacheConfiguration添加到Configuration中。在之前介绍CacheManager的时候我们已经提到了在Ehcache配置文件中每一个cache元素代表一个Cache定义。简单示例如下:

Xml代码  创建cacheManager 和 cache的几种方式
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">  
  3.     
  4.    <cache name="test" maxBytesLocalHeap="10M"/>  
  5.     
  6. </ehcache>  

 

 

       通过Configuration构建CacheManager时我们只需要把Cache定义即CacheConfiguration添加到Configuration中即可,示例代码如下:

Java代码  创建cacheManager 和 cache的几种方式
  1. @Test  
  2. public void cache2() {  
  3.    CacheConfiguration cacheConfiguration = new CacheConfiguration();  
  4.    cacheConfiguration.setName("test");  //指定cache名称  
  5.    cacheConfiguration.setMaxBytesLocalHeap("10M");   //指定最大可用堆内存  
  6.    Configuration config = new Configuration(); //构建一个空配置  
  7.    //添加Cache配置信息到CacheManager的配置信息中  
  8.    config.addCache(cacheConfiguration);  
  9.    CacheManager cacheManager = CacheManager.create(config);  
  10.    System.out.println(cacheManager.getOriginalConfigurationText());  
  11.    Cache cache = cacheManager.getCache("test");  
  12.    cache.put(new Element("key""value"));  
  13. }  

 

 

 

2.2     Cache内容的CRUD

       Cache内容的CRUD是指对Cache中保存的元素进行CRUD操作。

(1)新增元素

       新增元素可以通过Cache的put(Element ele)方法来进行。Element是键值对形式,我们真正想要缓存的其实是Element的value,但是我们可以通过key来区别不同的value。同时Element中还包括我们缓存的一些额外信息,如缓存的时间等。Element的key和value类似于Map的key和value,均可为Object对象。

Java代码  创建cacheManager 和 cache的几种方式
  1. public class CacheCRUDTest {  
  2.     
  3.    private CacheManager cacheManager;  
  4.     
  5.    @Before  
  6.    public void before() {  
  7.       cacheManager = CacheManager.create();  
  8.       cacheManager.addCache("cache");  
  9.    }  
  10.     
  11.    @After  
  12.    public void after() {  
  13.       cacheManager.shutdown();  
  14.    }  
  15.     
  16.    /** 
  17.     * 往Cache中新增元素 
  18.     */  
  19.    @Test  
  20.    public void create() {  
  21.       Cache cache = cacheManager.getCache("cache");  
  22.       Element ele = new Element("key""value");  
  23.       //把ele放入缓存cache中  
  24.       cache.put(ele);  
  25.    }  
  26.    
  27. }  

 

 

(2)获取元素

       获取元素的时候我们可以通过Cache的get()方法来进行的,其接收的参数是元素的key。

Java代码  创建cacheManager 和 cache的几种方式
  1. /** 
  2.  * 从Cache中读取元素 
  3.  */  
  4. @Test  
  5. public void read() {  
  6.    Cache cache = cacheManager.getCache("cache");  
  7.    //通过key来获取缓存中对应的元素  
  8.    Element ele = cache.get("key");  
  9.    System.out.println(ele);  
  10.    if (ele != null) {//当缓存的元素存在时获取缓存的值  
  11.       System.out.println(ele.getObjectValue());  
  12.    }  
  13. }  

 

 

(3)更新元素

       当我们在往Cache里面put元素的时候,如果Cache中已经存在相同key的元素了,则会用新的元素替换旧的元素,这也就意味着之前元素的一些信息将会丢失,如被查到的次数hitCount和创建时间等。

Java代码  创建cacheManager 和 cache的几种方式
  1. /** 
  2.  * 更新元素 
  3.  */  
  4. @Test  
  5. public void update() {  
  6.    Cache cache = cacheManager.getCache("cache");  
  7.    cache.put(new Element("key""value1"));  
  8.    System.out.println(cache.get("key"));  
  9.    //当添加元素的时候,如果缓存中已经存在相同key的元素则会将后者覆盖前者  
  10.    cache.put(new Element("key""value2"));  
  11.    System.out.println(cache.get("key"));  
  12. }  

 

 

       此外,使用Cache的replace(Element ele)方法也可以更新Cache中对应的元素。与直接put更新不同的是,replace只会在Cache中拥有相同key的元素时才会对之前的元素进行更新。replace也会覆盖之前元素信息。

Java代码  创建cacheManager 和 cache的几种方式
  1. /** 
  2.  * 更新元素 
  3.  */  
  4. @Test  
  5. public void update() {  
  6.    Cache cache = cacheManager.getCache("cache");  
  7.    cache.put(new Element("key""value1"));  
  8.    System.out.println(cache.get("key"));  
  9.    //替换元素的时候只有Cache中已经存在对应key的元素时才会替换,否则不操作。  
  10.    cache.replace(new Element("key""value2"));  
  11.    System.out.println(cache.get("key"));  
  12. }  

 

 

(4)删除元素

       删除元素是通过Cache的remove()方法进行的,其接收所要删除元素的key作为参数。

Java代码  创建cacheManager 和 cache的几种方式
  1. /** 
  2.  * 根据key来移除一个元素 
  3.  */  
  4. @Test  
  5. public void delete() {  
  6.    Cache cache = cacheManager.getCache("cache");  
  7.    //根据key来移除一个元素  
  8.    cache.remove("key");  
  9.    System.out.println(cache.get("key"));  
  10. }