最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Ehcache緩存框架入門級使用實例

 更新時間:2017年08月11日 10:47:19   作者:liangzzz  
這篇文章主要介紹了Java Ehcache緩存框架入門級使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

前言

JAVA緩存實現方案有很多,最基本的自己使用Map去構建緩存,或者使用memcached或Redis,但是上述兩種緩存框架都要搭建服務器,而Map自行構建的緩存可能沒有很高的使用效率,那么我們可以嘗試一下使用Ehcache緩存框架。

Ehcache主要基于內存緩存,磁盤緩存為輔的,使用起來方便。下面介紹如何在項目中使用Ehcache

入門使用教程

1.maven引用

<dependency>
 <groupId>net.sf.ehcache</groupId>
 <artifactId>ehcache</artifactId>
 <version>2.10.4</version>
</dependency>

2.在classpath下建立一個ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!--timeToIdleSeconds 當緩存閑置n秒后銷毀 --> 
<!--timeToLiveSeconds 當緩存存活n秒后銷毀 --> 
<!-- 
緩存配置 
    name:緩存名稱。 
    maxElementsInMemory:緩存最大個數。 
    eternal:對象是否永久有效,一但設置了,timeout將不起作用。 
    timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。 
    timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介于創(chuàng)建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。 
    overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。 
    diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區(qū)大小。默認是30MB。每個Cache都應該有自己的一個緩沖區(qū)。 
    maxElementsOnDisk:硬盤最大緩存?zhèn)€數。 
    diskPersistent:是否緩存虛擬機重啟期數據 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. 
    diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。 
    memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。 
    clearOnFlush:內存數量最大時是否清除。 
-->
   <!-- 磁盤緩存位置 -->
  <diskStore path="java.io.tmpdir/easylink-mall-web/ehcache"/>
  <!-- 默認緩存 -->
  <defaultCache
      maxElementsInMemory="10000"
      eternal="false"
      timeToIdleSeconds="120"
      timeToLiveSeconds="120"
      maxElementsOnDisk="10000000"
      diskExpiryThreadIntervalSeconds="120"
      memoryStoreEvictionPolicy="LRU">
    <persistence strategy="localTempSwap"/>
  </defaultCache>
  <!-- 商戶申請數據緩存 數據緩存40分鐘 -->
  <cache
      name="merchant-apply-cache"
      eternal="false"
      timeToIdleSeconds="2400"
      timeToLiveSeconds="2400"
      maxEntriesLocalHeap="10000"
      maxEntriesLocalDisk="10000000"
      diskExpiryThreadIntervalSeconds="120"
      overflowToDisk="false"
      memoryStoreEvictionPolicy="LRU">
  </cache>
</ehcache>

3.與spring的cacheManager結合使用

<?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">

  <!-- 支持緩存注解 -->
  <cache:annotation-driven cache-manager="cacheManager" />

  <!-- 默認是cacheManager -->
  <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager" ref="cacheManagerFactory"/>
  </bean>

  <!-- cache管理器配置 -->
  <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache.xml"/>
    <property name="shared" value="true" />
  </bean>

</beans>

4.代碼使用

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.baomidou.mybatisplus.toolkit.IdWorker;
import com.easylink.mall.entity.Merchant;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/spring.xml")
public class EhcacheTest {

  @Autowired
  private CacheManager cacheManager;

  @Test
  public void execute() {
    // 獲取商戶申請緩存容器
    Cache cache = cacheManager.getCache("merchant-apply-cache");
    Merchant merchant = new Merchant();
    Long id = IdWorker.getId();
    merchant.setId(id);
    merchant.setName("緩存測試");
    // 將商戶申請數據添加至緩存中 // key : id value : object
    cache.put(id, merchant);
    // 獲取商戶申請數據
    // 方法1
    Merchant cacheMerchant1 = (Merchant) cache.get(id).get();
    System.out.println(cacheMerchant1.getName());
    // 方法2
    Merchant cacheMerchant2 = cache.get(id, Merchant.class);
    System.out.println(cacheMerchant2.getName());
    // 將商戶申請數據從緩存中移除
    cache.evict(id);
  }

}

5.注意事項

cache.get(key) 和cache.get(key, class);方法,由于不知道你存入的key是什么類型,所以get的時候不會做key的類型檢查,如上述例子中

Long id = IdWorker.getId();
cache.put(id, merchant);
Merchant cacheMerchant2 = cache.get(id, Merchant.class);

put進去時的key是Long類型的,get的時候也只能傳入對應Long類型的key才能獲取到對應的value,如果傳入的是String類型的key,即使兩個key的值是一致的,也會導致無法獲取到對應的value。這個情況很容易發(fā)生在對request請求的參數,由于是String字符串類型,但是忘了做類型轉換就直接把這個String當做key去獲取對應的value。導致獲取不到,請同學們要注意,親身經歷,血與淚的教訓。

總結

以上就是我自己總結的Ehcache入門級用法,Ehcache是個不錯的內存緩存框架,如果沒使用過的話,可以嘗試使用。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 帶你快速上手Servlet

    帶你快速上手Servlet

    這篇文章主要介紹了帶你快速上手Servlet,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot實現自定義條件注解的代碼示例

    SpringBoot實現自定義條件注解的代碼示例

    在Spring Boot中,條件注解是一種非常強大的工具,它可以根據特定的條件來選擇是否加載某個類或某個Bean,文將介紹如何在Spring Boot中實現自定義條件注解,并提供一個示例代碼,需要的朋友可以參考下
    2023-06-06
  • Java程序員編程性能優(yōu)化必備的34個小技巧(總結)

    Java程序員編程性能優(yōu)化必備的34個小技巧(總結)

    這篇文章主要介紹了Java程序員編程性能優(yōu)化必備的34個小技巧(總結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-07-07
  • Java的Spring框架下的AOP編程模式示例

    Java的Spring框架下的AOP編程模式示例

    這篇文章主要介紹了Java的Spring框架下的AOP編程模式示例,文中分別講到了基于XML和基于@AspectJ的自定義方式,需要的朋友可以參考下
    2015-12-12
  • 每日幾道java新手入門面試題,通往自由的道路

    每日幾道java新手入門面試題,通往自由的道路

    這篇文章主要為大家分享了最有價值的是幾道java面試題,涵蓋內容全面,包括數據結構和算法相關的題目、經典面試編程題等,對hashCode方法的設計、垃圾收集的堆和代進行剖析,感興趣的小伙伴們可以參考一下
    2021-07-07
  • ElasticSearch查詢文檔基本操作實例

    ElasticSearch查詢文檔基本操作實例

    這篇文章主要為大家介紹了ElasticSearch查詢文檔基本操作實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java的Integer緩存池用法

    Java的Integer緩存池用法

    Java的Integer緩存池主要為了提升性能和節(jié)省內存,它緩存了-128到127范圍內的Integer對象,因此這些對象在比較時會直接比較引用,而不是值,其他包裝類如Byte、Short、Character也有類似的緩存池
    2025-02-02
  • Java如何實現驗證碼驗證功能

    Java如何實現驗證碼驗證功能

    這篇文章主要教大家如何實現Java驗證碼驗證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • SpringBoot+Vue項目新手快速入門指南

    SpringBoot+Vue項目新手快速入門指南

    最近剛剛做了一個基于vue+springboot的系統(tǒng),于是基于這點,對遇到的一些問題進行一些配置的匯總,下面這篇文章主要給大家介紹了關于SpringBoot+Vue項目新手快速入門的相關資料,需要的朋友可以參考下
    2022-06-06
  • Spring Boot項目中集成微信支付v3

    Spring Boot項目中集成微信支付v3

    這篇文章主要介紹了Spring Boot項目中集成微信支付v3,幫助大家更好的理解和使用spring boot框架,感興趣的朋友可以了解下
    2021-01-01

最新評論

汨罗市| 政和县| 高州市| 靖宇县| 达拉特旗| 大厂| 孝义市| 塘沽区| 济宁市| 鹤山市| 兰坪| 沙坪坝区| 桂东县| 城固县| 新巴尔虎右旗| 台中县| 喜德县| 青河县| 嘉祥县| 天门市| 雷州市| 荔波县| 永年县| 梅河口市| 洪洞县| 沁水县| 灵石县| 新河县| 天津市| 酒泉市| 高淳县| 塘沽区| 丰顺县| 沂源县| 丹江口市| 漳平市| 九江市| 通城县| 沽源县| 罗城| 潢川县|