zoukankan      html  css  js  c++  java
  • spring+shiro+ehcache整合

    1.导入jar包(pom.xml文件)

                     <!-- ehcache缓存框架 -->
    		<dependency>
    			<groupId>net.sf.ehcache</groupId>
    			<artifactId>ehcache-core</artifactId>
    			<version>2.6.11</version>
    		</dependency>    
    

      Spring 整合 ehcache 包 spring-context-support 包

    2.使用 ehcache ,导入 ehcache.xml 配置文件

    解压 ehcache-core.jar 包 ,将 ehcache-failsafe.xml 复制 src/main/resources
    改名 ehcache.xml

    ehcache.xml文件

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    
        <diskStore path="java.io.tmpdir"/>
    	<!-- 默认缓存区 -->
        <defaultCache
                maxElementsInMemory="10000"
                eternal="false"
                timeToIdleSeconds="120"
                timeToLiveSeconds="120"
                maxElementsOnDisk="10000000"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LRU">
            <persistence strategy="localTempSwap"/>
        </defaultCache>
        <!-- 自定义缓存区 -->
        <cache name="bos"
                maxElementsInMemory="10000"
                eternal="false"
                timeToIdleSeconds="120"
                timeToLiveSeconds="120"
                maxElementsOnDisk="10000000"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LRU">
            <persistence strategy="localTempSwap"/>
        </cache>
        <!-- 自定义缓存区 -->
        <cache name="standard"
                maxElementsInMemory="10000"
                eternal="false"
                timeToIdleSeconds="120"
                timeToLiveSeconds="120"
                maxElementsOnDisk="10000000"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LRU">
            <persistence strategy="localTempSwap"/>
        </cache>
        
    </ehcache>

    diskStore

    指定数据存储位置,可指定磁盘中的文件夹位置

    defaultCache

    默认的管理策略

    name

    Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)

    maxElementsInMemory

    在内存中缓存的element的最大数目

    如果放入cache中的元素超过这个数值,有两种情况:

    1、若overflowToDisk的属性值为true,会将cache中多出的元素放入磁盘文件中。

    2、若overflowToDisk的属性值为false,会根据memoryStoreEvictionPolicy的策略替换cache中原有的元素。

    eternal

    设定缓存的elements是否永远不过期。
    如果为true,则缓存的数据始终有效,
    如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。

    overflowToDisk

    如果内存中数据超过内存限制,是否要缓存到磁盘上。

    maxElementsOnDisk

    在磁盘上缓存的element的最大数目,默认值为0,表示不限制。

    timeToIdleSeconds

    对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。以秒为单位。

    timeToLiveSeconds

    对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。以秒为单位。 

    diskPersistent

    是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 

    diskExpiryThreadIntervalSeconds

    对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。以秒为单位。

    iskSpoolBufferSizeMB

    DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。

    memoryStoreEvictionPolicy

    如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。

    缓存的3 种清空策略 :

    FIFO ,first in first out (先进先出).

    LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。 

    LRU ,Least Recently Used(最近最少使用). 
    (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,
    而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

    3.applicationContext-ehcache.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xmlns:cache="http://www.springframework.org/schema/cache"
    	xsi:schemaLocation="
    		http://www.springframework.org/schema/beans 
    		http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/cache 
    		http://www.springframework.org/schema/cache/spring-cache.xsd ">
     
    	 <!-- 缓存配置  -->
    	<bean id="ehCacheManager" 
    		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    		<property name="configLocation" value="classpath:ehcache.xml" />
    	</bean>
    	
    	<!-- shiro封装cacheManager -->
    	<bean id="shiroCacheManager" 
    		class="org.apache.shiro.cache.ehcache.EhCacheManager">
    		<property name="cacheManager" ref="ehCacheManager" />
    	</bean>
    	
    	<!-- spring 封装ehcache缓存管理器  -->
    	<bean id="springCacheManager" 
    		class="org.springframework.cache.ehcache.EhCacheCacheManager">
    		<property name="cacheManager" ref="ehCacheManager" />
    	</bean>
    	
    	<!-- 激活spring 缓存注解 -->
    	<cache:annotation-driven cache-manager="springCacheManager"/>
    	
    </beans>
    

      加载该配置文件

    4.修改web.xml文件

    <!-- spring配置文件位置 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:applicationContext*.xml</param-value>
    	</context-param>
    

     5.将cache管理器注入到安全管理器中 

    6.对认证数据、授权数据 哪些进行缓存 ?

    对应到ehcache.xml文件中的自定义的缓存缓存区

    注意: 使需要缓存对象,实现 Serializable 接口

    使用注解进行开发

    第七步: 在被 spring 管理 bean 对象方法上 使用@Cacheable 、@CacheEvict
    @Cacheable 应用缓存区,对方法返回结果进行缓存 ---- 用于查询方法
    @CacheEvict 清除缓存区数据 --- 用于 增加、修改、删除 方法

  • 相关阅读:
    我的.emacs配置文件
    C语言夜未眠5——变量前缀代表的含义
    c语言夜未眠4——对某一位或几位进行反转
    指针也可这么玩:返回局部指针变量,局部噢
    lua学习之table类型
    10个最“优秀”的代码注释
    为什么我希望用C而不是C++来实现ZeroMQ
    c语言夜未眠2——实现撤销和重做
    emacs学习笔记(基本概念)
    flutter json_serializable
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/ehcache_spring_shiro.html
Copyright © 2011-2022 走看看