首页 > 其他分享 >Ehcache 介绍(2)--Ehcache2 基本使用

Ehcache 介绍(2)--Ehcache2 基本使用

时间:2024-03-03 10:33:19浏览次数:30  
标签:Ehcache 缓存 -- cacheConfiguration Ehcache2 cacheManager new Element myCache

本文主要介绍 Ehacche2 的基本使用,文中所使用到的软件版本:Java 1.8.0_341、Ehcache 2.10.9.2。

1、引入依赖

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.10.9.2</version>
</dependency>

2、缓存配置和创建

2.1、XML 方式配置缓存

A、在 src/main/resources 目录下新建 ehcache2.xml:

<ehcache>
    <diskStore path="d:/temp"/>
    <defaultCache
            maxEntriesLocalHeap="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxEntriesLocalDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>

    <cache name="myCache"
            maxEntriesLocalHeap="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxEntriesLocalDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>
</ehcache>

defaultCache 表示缓存的默认配置,cache 表示配置的具体缓存。

B、加载配置
@Test
public void test01() {
    //加载配置文件
    CacheManager cacheManager = new CacheManager(getClass().getClassLoader().getResourceAsStream("ehcache2.xml"));
    Cache myCache = cacheManager.getCache("myCache");
    Element element = new Element(1, "aaa");
    myCache.put(element);
    Element element2 = myCache.get(1);
    log.info(element2.getObjectValue() + "");
    myCache.remove(1);
    log.info(myCache.get(1) + "");
    cacheManager.shutdown();
}

2.2、API 方式配置缓存

@Test
public void test02() {
    //CacheManager 配置
    Configuration configuration = new Configuration();
    DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
    diskStoreConfiguration.setPath("d:/temp");
    configuration.diskStore(diskStoreConfiguration);
    CacheManager cacheManager = new CacheManager(configuration);

    //Cache 配置
    CacheConfiguration cacheConfiguration = new CacheConfiguration();
    cacheConfiguration.setName("myCache");
    cacheConfiguration.setMaxEntriesLocalHeap(1000);
    cacheConfiguration.setMaxEntriesLocalDisk(10000);
    cacheConfiguration.setTimeToIdleSeconds(60);
    cacheConfiguration.setTimeToLiveSeconds(120);
    cacheConfiguration.setMemoryStoreEvictionPolicy("LFU");//缓存对象清除策略
    cacheConfiguration.setDiskExpiryThreadIntervalSeconds(120);
    cacheConfiguration.setEternal(false);
    PersistenceConfiguration persistenceConfiguration = new PersistenceConfiguration();
    persistenceConfiguration.setStrategy("LOCALTEMPSWAP");
    cacheConfiguration.persistence(persistenceConfiguration);
    Cache cache = new Cache(cacheConfiguration);

    cacheManager.addCache(cache);

    //获取缓存并使用
    Cache myCache = cacheManager.getCache("myCache");
    Element element = new Element(1, "aaa");
    myCache.put(element);
    Element element2 = myCache.get(1);
    log.info(element2.getObjectValue() + "");
    myCache.remove(1);
    log.info(myCache.get(1) + "");
    cacheManager.shutdown();
}

 

完整代码:

package com.abc.demo.cache;

import lombok.extern.slf4j.Slf4j;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.DiskStoreConfiguration;
import net.sf.ehcache.config.PersistenceConfiguration;
import org.junit.Test;

@Slf4j
public class Ehcache2Case {
    @Test
    public void test01() {
        //加载配置文件
        CacheManager cacheManager = new CacheManager(getClass().getClassLoader().getResourceAsStream("ehcache2.xml"));
        Cache myCache = cacheManager.getCache("myCache");
        Element element = new Element(1, "aaa");
        myCache.put(element);
        Element element2 = myCache.get(1);
        log.info(element2.getObjectValue() + "");
        myCache.remove(1);
        log.info(myCache.get(1) + "");
        cacheManager.shutdown();
    }

    @Test
    public void test02() {
        //CacheManager 配置
        Configuration configuration = new Configuration();
        DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
        diskStoreConfiguration.setPath("d:/temp");
        configuration.diskStore(diskStoreConfiguration);
        CacheManager cacheManager = new CacheManager(configuration);

        //Cache 配置
        CacheConfiguration cacheConfiguration = new CacheConfiguration();
        cacheConfiguration.setName("myCache");
        cacheConfiguration.setMaxEntriesLocalHeap(1000);
        cacheConfiguration.setMaxEntriesLocalDisk(10000);
        cacheConfiguration.setTimeToIdleSeconds(60);
        cacheConfiguration.setTimeToLiveSeconds(120);
        cacheConfiguration.setMemoryStoreEvictionPolicy("LFU");//缓存对象清除策略
        cacheConfiguration.setDiskExpiryThreadIntervalSeconds(120);
        cacheConfiguration.setEternal(false);
        PersistenceConfiguration persistenceConfiguration = new PersistenceConfiguration();
        persistenceConfiguration.setStrategy("LOCALTEMPSWAP");
        cacheConfiguration.persistence(persistenceConfiguration);
        Cache cache = new Cache(cacheConfiguration);

        cacheManager.addCache(cache);

        //获取缓存并使用
        Cache myCache = cacheManager.getCache("myCache");
        Element element = new Element(1, "aaa");
        myCache.put(element);
        Element element2 = myCache.get(1);
        log.info(element2.getObjectValue() + "");
        myCache.remove(1);
        log.info(myCache.get(1) + "");
        cacheManager.shutdown();
    }
}
Ehcache2Case.java

3、Ehcache2 配置参数说明

参数 子参数 说明 默认值
diskStore   磁盘配置  
  path 数据存储目录 java.io.tmpdir
name   缓存名称   
maxEntriesLocalHeap   内存中可以存放的最大条目数,0 表示无限制 0
maxEntriesLocalDisk   磁盘上可以存放的最大条目数,0 表示无限制 0
timeToIdleSeconds   缓存中条目的最大空闲时间,0 表示无限制 0
timeToLiveSeconds   缓存中条目的最大存活时间,0 表示无限制 0
eternal   缓存条目是否永不过期;如果为 true,将忽略过期时间(timeToIdleSeconds,timeToLiveSeconds) false
memoryStoreEvictionPolicy   缓存对象清除策略:FIFO,LFU,LRU LRU
diskExpiryThreadIntervalSeconds   缓存条目过期清理的时间间隔 120
persistence   持久化配置  
  strategy 持久策略:localTempSwap,localRestartable,none,distributed  

3.1、缓存对象清除策略

FIFO(First In First Out):先进先出
LFU(Least Frequently Used):最少使用,使用次数最少的条目将被清理
LRU(Least Recenly Used):最近最少使用,最近一段时间内使用次数最少的条目将被清理

3.2、持久策略

localTempSwap:当内存中的条目已经满了的时候,将条目临时存放在磁盘上,一旦重启就会消失。
localRestartable:该策略只对企业版 Ehcache 有用,它可以将内存里面的条目持久化到硬盘上,重启之后再从硬盘上恢复到内存中。
none:不持久化缓存的条目。
distributed:该策略是用于分布式情况下的。

 

标签:Ehcache,缓存,--,cacheConfiguration,Ehcache2,cacheManager,new,Element,myCache
From: https://www.cnblogs.com/wuyongyin/p/17994985

相关文章

  • Blazor之onclick事件更新值
    <h1>EventHandlerExample1</h1><h2>@headingValue</h2><p><button@onclick="UpdateHeading">Updateheading</button></p><p><label><inputtype="checkb......
  • dfs剪枝(排除等效冗余)
    一、剪枝优化1.优化搜索顺序:有限考虑分支较少的搜索方式,常见的比如从大到小排序2.排除等效冗余:排除等效的情况,本题就是很好的例子,稍后解释3.可行性剪枝4.最优性剪枝二、本题的排除等效冗余1.如果是木棒的第一段就搜索失败了,则一定搜不到方案2.如果是木棒的最后一段搜索失败......
  • P2532 [AHOI2012] 树屋阶梯 题解
    P2532[AHOI2012]树屋阶梯题解容易发现答案是卡特兰数,那么考虑证明这一点。考虑从左下角到右上角填满格子。利用动态规划的思想,回忆一下某道\(IOI\)的题目[数字三角形],每个格子的方案都只能由其左边或下边转移而来。可以结合图理解一下。好,刚才这个定义显然很符合卡特兰......
  • 力扣118.杨辉三角
    题目:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。实现方法:从第三行开始,通过循环,依次求取上一行相邻两数的和,添加到结果里。funcgenerate(numRowsint)[][]int{ varr[][]int fori:=0;i<nu......
  • MC 江小白
    #include<iostream>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intmain(intargc,char**argv){boolcon=mc.ConnectMinecraft("zk.makeblock.net.cn","a9d44e758f6e4cf8b2da2624156f24d3");if(!con){......
  • 僵尸小白
    #include<iostream>#include<string>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intmain(intargc,char**argv){ boolcon=mc.ConnectMinecraft("zk","08bd17c1ea594f2684182fd956c2d172"); if(!con)......
  • 11111
    #include<bits/stdc++.h>#include"minecraft.h"#include<Windows.h>usingnamespacestd;TxMinecraftmc;intmain(){boolcon=mc.ConnectMinecraft("zk","4cd7d6e558c943c397a3a5243fa78e19");if(!con){......
  • 僵尸小白
    #include<iostream>#include"minecraft.h"TxMinecraftmc;usingnamespacestd;intmain(){boolcon=mc.ConnectMinecraft("zk","919b005179e840e1bf78fef437b2f298");if(!con){cout<<"失败";}......
  • 江小白{红色和绿色}(我的世界)
    #include<iostream>#include"minecraft.h"#include"Windows.h"TxMinecraftmc;usingnamespacestd;intX,Y,Z,id=0,data=0;inta=0;voidchu_shi_hua(){X=49825,Y=4,Z=50148;}voidjiang_xiao_bai_hongse(){chu_shi_hua();mc.fil......
  • 一文搞懂 Go 1.21 的日志标准库 - slog
    一文搞懂Go1.21的日志标准库-slog原创 rubys_ awk 2024-01-3120:20 广东 1人听过在过去多年里,我们在Go中写日志的时候,通常都是使用 Zerolog 或者 Zap 这两个包。在本文中,我们将重点探讨Go最近引入的 log/slog 包,该包旨在将高性能、结构化和分级日志......