Spring、Shiro和EHCache 緩存的使用案例

本文介紹 Shiro + EHCache Spring 的結合java

1、首先有兩種方式來建立緩存實例,

只介紹spring bean配置方式spring

一、Spring EhCacheManagerFactoryBean方式建立。apache

圖片

二、EhCacheManager方式建立。 緩存

圖片

2、EHCache配置文件說明

1EHCache 配置文件代碼。app

圖片

二、 EHCache  配置文件說明jvm

<?xml version="1.0" encoding="UTF-8"?>ide

<ehcache >測試

    <diskStore path="java.io.tmpdir"/>spa

 <!--  name Cache的名稱,必須是惟一的(ehcache會把這個cache放到HashMap裏)線程

 maxElementsInMemory 內存中保持的對象數量

 maxElementsOnDisk DiskStore中保持的對象數量,默認值爲0,表示不限制

 eternal 是不是永恆數據,若是是,則它的超時設置會被忽略

 overflowToDisk 若是內存中數據數量超過maxElementsInMemory限制,是否要緩存到磁盤上

 timeToIdleSeconds 對象空閒時間,指對象在多長時間沒有被訪問就會失效。只對eternal爲false的有效。默認值0,表示一直能夠訪問

 timeToLiveSeconds 對象存活時間,指對象從建立到失效所須要的時間。只對eternal爲false的有效。默認值0,表示一直能夠訪問

 diskPersistent 是否在磁盤上持久化。指重啓jvm後,數據是否有效。默認爲false

 diskExpiryThreadIntervalSeconds 對象檢測線程運行時間間隔。標識對象狀態的線程多長時間運行一次

 diskSpoolBufferSizeMB DiskStore使用的磁盤大小,默認值30MB。每一個cache使用各自的DiskStore

 memoryStoreEvictionPolicy 若是內存中數據超過內存限制,向磁盤緩存時的策略。默認值LRU,可選FIFO、LFU-->

    <cache name="authorizationCache" 

           maxElementsInMemory="10000"

            eternal="false" 

            timeToIdleSeconds="120"

            timeToLiveSeconds="120"

            overflowToDisk="false"

            diskPersistent="false"

            diskExpiryThreadIntervalSeconds="120">

    </cache>

</ehcache>

3、 ShiroCacheManager管理類。

ShiroCacheManager實現org.apache.shiro.cache.Cache接口,重寫裏面方法。

圖片


4、實例測試

看代碼。

package com.ehcache.test;

import org.apache.shiro.cache.Cache;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) {

//一、建立 Spring 的 IOC 容器

ClassPathXmlApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");

//二、獲取IOC容器中ShiroCacheManager實例

ShiroCacheManager<String, String> shiroCacheManager =(ShiroCacheManager<String, String>)ctx.getBean("shiroCacheManager");

Cache<String, String>  cache =shiroCacheManager.getCache();

//三、保存

cache.put("key""12");

System.out.println(cache.get("key"));

System.out.println("***************************");

//四、 刪除

cache.remove("key");

System.out.println(cache.get("key"));

}

}

相關文章
相關標籤/搜索