使用这个缓存技术缓存权限数据的原因,是因为在项目当中每当进行一个操作的时候,都会走realm当中去查询该用户有没有相应的权限,而realm都会从数据库进行查询,这样的话性能非常不好,效率不行,因为每个用户对应的权限基本上不会改变,当他登录之后就固定了查一遍就可以了所以给他存入到缓存当中也是可以的.
引入依赖
<!-- 引入ehcache的依赖 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.6</version>
</dependency>
ehcache.xml配置文件,注释里面每一行对应的都是下面每一个配置的含义
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!-- 存到硬盘的地方,可以改成d:///自己的盘符路径,下面这个写的是系统的临时路径 -->
<diskStore path="java.io.tmpdir"/>
<!--
存到内存对象的个数
缓存的数据是否永久有效
最大空闲时间(缓存数据空闲2分钟就会自动清理掉)
存活时间
溢出到磁盘,就是查出来权限对象万一超过一万个就会存到磁盘当中,上面的路径写啥就存到哪儿去
磁盘最多存的对象个数
磁盘数据是否持久化
多长时间清理一次没用的数据
LRU是最近最少使用的会优先清理(FIFO是先进先出)
-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
默认是在这个路径下,方便使用的话把它改改,然后把它注入到shiro的安全管理器当中,然后它就自己使用上这个缓存了
<!-- 注册安全管理器对象 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="bosRealm"/>
<!-- 注入缓存管理器 -->
<property name="cacheManager" ref="cacheManager"/>
</bean>
<!-- 注册缓存管理器 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<!-- 注入ehcache的配置文件 -->
<property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>
</bean>