JFinal缓存插件EhCachePlugin

EhCachePlugin是JFinal集成的缓存插件,使用EhCachePlugin可以提高系统的并发访问速度。这是JFinal官方文档介绍这款插件的第一句话。但是中间的文档介绍比较少,这里介绍几种使用方法。

首先配置ehcache.xml配置文件,我直接复制我项目的

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="ehcache.xsd"
	updateCheck="false" monitoring="autodetect"
	dynamicConfig="true">
	<!--timeToIdleSeconds 当缓存闲置n秒后销毁 --> 
	<!--timeToLiveSeconds 当缓存存活n秒后销毁 --> 
	<!-- 
		缓存配置 
		   name:缓存名称。 
		   maxElementsInMemory:缓存最大个数。 
		   eternal:对象是否永久有效,一但设置了,timeout将不起作用。 
		   timeToIdleSeconds:当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空;即缓存被创建后,最后一次访问时间到缓存失效之时,两者之间的间隔,单位为秒(s)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 
		   timeToLiveSeconds:当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清除;即缓存自创建日期起能够存活的最长时间,单位为秒(s)。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。 
		   overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。 
		   diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 
		   maxElementsOnDisk:硬盘最大缓存个数。 
		   diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. 
		   diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。 
		   memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。 
		   clearOnFlush:内存数量最大时是否清除。 
	-->
	<diskStore path="/var/pb_dev/cache"/>
    <!--默认缓存-->
	<defaultCache
		maxEntriesLocalHeap="1000000"
		eternal="false"
		overflowToDisk="true"
		timeToIdleSeconds="300"
		timeToLiveSeconds="60">
	</defaultCache>
    
	<!-- 缓存半小时 -->
	<cache name="half-hour"
		maxElementsInMemory="10000"
		maxElementsOnDisk="100000"
		eternal="false"
		timeToIdleSeconds="1800"
		timeToLiveSeconds="0"
		overflowToDisk="true"
		diskPersistent="true"
		/>
	<!-- 测试缓存 -->
	<cache name="hrl"
		   maxElementsInMemory="10000"
		   maxElementsOnDisk="100000"
		   eternal="false"
		   timeToIdleSeconds="10"
		   timeToLiveSeconds="0"
		   overflowToDisk="true"
		   diskPersistent="true"
	/>
	<!-- Shiro缓存 -->
	<cache name="shiro"
		maxElementsInMemory="10000"
		maxElementsOnDisk="100000"
		eternal="true"
		timeToIdleSeconds="1800"
		timeToLiveSeconds="0"
		overflowToDisk="true"
		diskPersistent="true"
		/>
</ehcache>

1、注解配置缓存

    @Before(CacheInterceptor.class)
    @CacheName("hrl")
    public void index() {
        ActUser actUser= richService.findUser(21l);
        setAttr("test",actUser.getWechatNickname());
        render("index.html");
    }
这里设置的缓存时间为10s,在10s内重复访问这个方法(打断点比较明显,断点在10s内不会重复进入,说明缓存生效)

2、使用CacheKit方法管理缓存

    public void index() {
         Map<String,Object> map= CacheKit.get("half-hour","index");
        if(Map==null){
            ActUser actUser= richService.findUser(21l);
            System.out.println("---------------------------------"+actUser.getWechatNickname());
            map=new HashMap<String, Object>();
            CacheKit.put("half-hour","index",map);
            System.out.println("缓存不存在");
        }else {
            System.out.println("缓存存在");
            CacheKit.remove("half-hour","index");
        }

    }

这里只要注意    CacheKit.put方法设置的CacheName和Key来判断indexMap这个Value就可以啦,CacheName依然是在配置文件中进行配置。

移除缓存的方法CacheKit.remove("","")或者CacheKit.removeAll(cacheName)方法

总结:这种方法适用于在数据库中不是频繁增加的操作,因为在缓存存活的这段时间,是不会去访问数据库的,所以这也是一个弊端





猜你喜欢

转载自blog.csdn.net/qq_35733535/article/details/79847277
今日推荐