zoukankan      html  css  js  c++  java
  • 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>
    

      

  • 相关阅读:
    搜索引擎 中 排序学习 的小思考
    《算法导论》之分治策略与动态规划
    《算法导论》之基础篇
    中文文本信息处理的原理与应用读书笔记1
    python 类变量 在多线程下的共享与释放问题
    日志管理
    《领导梯队》读书分享
    初见微服务之服务注册与发现
    初见微服务之RESTful API
    初见微服务之架构概述
  • 原文地址:https://www.cnblogs.com/a757956132/p/4952917.html
Copyright © 2011-2022 走看看