• Cache 工具类


    package com.thinkgem.jeesite.common.utils;
    
    import net.sf.ehcache.Cache;
    import net.sf.ehcache.CacheManager;
    import net.sf.ehcache.Element;
    
    /**
     * Cache工具类
     * @author ThinkGem
     * @version 2013-5-29
     */
    public class CacheUtils {
    	
    	private static CacheManager cacheManager = ((CacheManager)SpringContextHolder.getBean("cacheManager"));
    
    	private static final String SYS_CACHE = "sysCache";
    
    	/**
    	 * 获取SYS_CACHE缓存
    	 * @param key
    	 * @return
    	 */
    	public static Object get(String key) {
    		return get(SYS_CACHE, key);
    	}
    	
    	/**
    	 * 写入SYS_CACHE缓存
    	 * @param key
    	 * @return
    	 */
    	public static void put(String key, Object value) {
    		put(SYS_CACHE, key, value);
    	}
    	
    	/**
    	 * 从SYS_CACHE缓存中移除
    	 * @param key
    	 * @return
    	 */
    	public static void remove(String key) {
    		remove(SYS_CACHE, key);
    	}
    	
    	/**
    	 * 获取缓存
    	 * @param cacheName
    	 * @param key
    	 * @return
    	 */
    	public static Object get(String cacheName, String key) {
    		Element element = getCache(cacheName).get(key);
    		return element==null?null:element.getObjectValue();
    	}
    
    	/**
    	 * 写入缓存
    	 * @param cacheName
    	 * @param key
    	 * @param value
    	 */
    	public static void put(String cacheName, String key, Object value) {
    		Element element = new Element(key, value);
    		getCache(cacheName).put(element);
    	}
    
    	/**
    	 * 从缓存中移除
    	 * @param cacheName
    	 * @param key
    	 */
    	public static void remove(String cacheName, String key) {
    		getCache(cacheName).remove(key);
    	}
    	
    	/**
    	 * 获得一个Cache,没有则创建一个。
    	 * @param cacheName
    	 * @return
    	 */
    	private static Cache getCache(String cacheName){
    		Cache cache = cacheManager.getCache(cacheName);
    		if (cache == null){
    			cacheManager.addCache(cacheName);
    			cache = cacheManager.getCache(cacheName);
    			cache.getCacheConfiguration().setEternal(true);
    		}
    		return cache;
    	}
    
    	public static CacheManager getCacheManager() {
    		return cacheManager;
    	}
    	
    }
    

      spring配置文件:

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    		<property name="configLocation" value="classpath:cache/ehcache-local.xml" />
    	</bean>
    

      ehcache-local.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache updateCheck="false" name="defaultCache">
    
    	<!-- 
    	
    		  CacheManager级别有三个属性可以分别用来限制三种存储器缓存信息的大小,其控制的都是字节数,分别是maxBytesLocalHeap、maxBytesLocalOffHeap和maxBytesLocalDisk。
    	   CacheManager级别限制的大小是其内所有的Cache共享的。
    	   	  maxBytesLocalHeap是用来限制缓存所能使用的堆内存的最大字节数的,但是当我们没有指定CacheManager级别的maxBytesLocalHeap时,我们必须在每一个Cache上指定maxBytesLocalHeap或maxEntriesLocalHeap。
    	   	  maxBytesLocalOffHeap是用来限制缓存所能使用的非堆内存的最大字节数
    	   	  maxBytesLocalDisk是用来限制缓存所能使用的磁盘的最大字节数的
    	   	    当我们在CacheManager级别指定了maxBytesLocalOffHeap时就会隐式的使所有Cache级别的overflowToOffHeap为true,在Cache级别使用该属性时只会使当前Cache的overflowToOffHeap为true
    	   	    当我们在CacheManager级别指定了maxBytesLocalDisk时会隐式的指定所有Cache的overflowToDisk为true,而Cache级别只会使当前Cache的overflowToDisk为true
    		
    		    缓存大小的限制可以设置在CacheManager上,也可以设置在单个的Cache上。我们可以设置缓存使用内存的大小,也可以设置缓存使用磁盘的大小,但是使用堆内存的大小是必须设置的,
                   其它可设可不设,默认不设就是无限制。在设置缓存大小的时候,我们可以设置缓存使用某一个存储器的最大字节数,也可以设置缓存在某一个存储器上最多存放元素的数量。
    	 -->
    
    	<diskStore path="../temp/jeesite/ehcache" />
    
    	<!-- 默认缓存配置. -->
    	<defaultCache maxEntriesLocalHeap="100" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600"
    		overflowToDisk="true" maxEntriesLocalDisk="100000" />
    	
    	<!-- 系统缓存 -->
    	<cache name="sysCache" maxEntriesLocalHeap="100" eternal="true" overflowToDisk="true"/>
    	
    	<!-- 用户缓存 -->
    	<cache name="userCache" maxEntriesLocalHeap="100" eternal="true" overflowToDisk="true"/>
    	
    	<!-- 工作流模块缓存 -->
    	<cache name="actCache" maxEntriesLocalHeap="100" eternal="true" overflowToDisk="true"/>
    	
    	<!-- 内容管理模块缓存
    	<cache name="cmsCache" maxEntriesLocalHeap="100" eternal="true" overflowToDisk="true"/> -->
    	
    	<!-- 系统活动会话缓存 -->
        <cache name="activeSessionsCache" maxEntriesLocalHeap="10000" overflowToDisk="true"
               eternal="true" timeToLiveSeconds="0" timeToIdleSeconds="0"
               diskPersistent="true" diskExpiryThreadIntervalSeconds="600"/>
        
        <!-- 简单页面缓存
        <cache name="SimplePageCachingFilter" maxEntriesLocalHeap="100" eternal="false" overflowToDisk="true"
        	timeToIdleSeconds="120" timeToLiveSeconds="120" memoryStoreEvictionPolicy="LFU"/> -->
        	
    </ehcache>
    

      

  • 相关阅读:
    比较一下ASP、ASP.net、JSP和PHP的优点和缺点
    修改MSSQLServer的登陆方式
    ASP.NET获取IP和MAC代码(C#)
    RPM 五种基本的操作方式
    飞鸽TCP/IP 10106错误解决
    修复rpm命令(不小心删了rpm命令)方法
    Asp.Net连接ACCESS数据库相对路径问题 web.config中如何使用相对路径及在类文件中调用这个相对路径
    VMware下redhat linux 9使用NAT共享主机IP上网
    Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、源代码管理、版本控制
    SQL2005安装出现“性能监视器计数器要求错误”的解决方案
  • 原文地址:https://www.cnblogs.com/a757956132/p/4952917.html
Copyright © 2020-2023  润新知