• Ehcache2 的配置(不使用配置文件)


    EhCache是一个开放源码的,基于标准的高速缓存系统。

    网上关于EhCache的使用配置很多,但是一般是基于配置文件的。但是实际应用中。我们可能需要动态的管理缓存,这时候单纯配置文件就不够用了。

    所以我们需要编码形式的配置创建缓存。

    其实EhCache是支持硬编码方式创建配置的(配置文件只是一种形式,最终也是需要解析成JAVA类模型的)。

    这里可以比较一下两种创建EhCache缓存方式的差异。


    第一种方式,不使用配置文件,使用JAVA代码创建配置。

    Configuration configuration = new Configuration()//
            .diskStore(new DiskStoreConfiguration().path("java.io.tmpdir"))//临时文件目录
            //指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机
            .cacheManagerPeerProviderFactory(new FactoryConfiguration<FactoryConfiguration<?>>()//
                    .className(RMICacheManagerPeerProviderFactory.class.getName())//
                    .properties("peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:40005/metaCache")//
            )//
            //配宿主主机配置监听程序
            .cacheManagerPeerListenerFactory(new FactoryConfiguration<FactoryConfiguration<?>>()//
                    .className(RMICacheManagerPeerListenerFactory.class.getName())//
                    .properties("port=40004,socketTimeoutMillis=2000")//
            )//
            .cache(new CacheConfiguration("metaCache", 10000)//缓存名称(必须唯一),maxElements内存最多可以存放的元素的数量
                    .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)//清理机制:LRU最近最少使用 FIFO先进先出 LFU较少使用
                    .timeToIdleSeconds(1000)//元素最大闲置时间
                    .timeToLiveSeconds(2000)//元素最大生存时间
                    .eternal(false)//元素是否永久缓存
                    .diskExpiryThreadIntervalSeconds(120)//缓存清理时间(默认120秒)
                    //LOCALTEMPSWAP当缓存容量达到上限时,将缓存对象(包含堆和非堆中的)交换到磁盘中
                    //NONE当缓存容量达到上限时,将缓存对象(包含堆和非堆中的)交换到磁盘中
                    //DISTRIBUTED按照_terracotta标签配置的持久化方式执行。非分布式部署时,此选项不可用
                    .persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE)).maxEntriesLocalDisk(0)//磁盘中最大缓存对象数0表示无穷大)
                    .cacheEventListenerFactory(new CacheConfiguration.CacheEventListenerFactoryConfiguration().className(RMICacheReplicatorFactory.class.getName()))//
            );
    
    CacheManager manager = CacheManager.create(configuration);
    Cache cache = manager.getCache("metaCache");//获得缓存

    (配置使用连缀写到一起了,实际应用中也可以分开写)

     

    第二种方式,使用配置文件。(这种方式网上资料很多,下面例子主要是与上面的例子做对比)
    ehache.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
        <diskStore path="java.io.tmpdir" />
        <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:40005/metaCache" />
        <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="port=40004,socketTimeoutMillis=2000" />
        <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        </defaultCache>
        <cache name="metaCache" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="2000" timeToLiveSeconds="1000" overflowToDisk="false">
            <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
        </cache>
    </ehcache>

    JAVA中使用缓存

    URL url = getClass().getResource("ehache.xml");
    CacheManager manager = new CacheManager(url);
    Cache cache = manager.getCache("metaCache");//获得缓存
  • 相关阅读:
    禅道导出用例模板乱码问题
    安装docker,部署禅道
    清理ubuntu apt中不用的源
    golang和python连接阿里云MongoDB云数据库(解决ReplicaSetNoPrimary错误)
    10分钟使用腾讯轻量应用服务器与frp开启内网穿透实现ssh
    java初学笔记
    elasticsearch相关
    XML转化问题,
    借鉴别人的。做个笔记SourceTree 使用介绍
    SQL 查询数据库是否存在该表该字段该内容
  • 原文地址:https://www.cnblogs.com/relucent/p/3850737.html
Copyright © 2020-2023  润新知