多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Java緩存Ehcache-核心類和方法介紹及使用實例

Java緩存Ehcache-核心類和方法介紹及使用實例

來源:程序員人生   發布時間:2014-10-11 08:00:00 閱讀次數:4629次

Ehcache核心類和方法

 

EhCache里面有一個CacheManager類型,它負責管理cacheCache里面存儲著Element對象,Element必須是key-value對。Cache是實際物理實現的,在內存中或者磁盤。這些組件的邏輯表示就是下面即將要討論的類。他們的方法提供了可編程的訪問方式。

 

CacheManager

負責Cache的創建、訪問、移除。

 

CacheManager創建

CacheManager支持兩種創建模式:單例(Singleton mode)和實例(InstanceMode)。

2.5之前的版本中,在同一個JVM中允許存在任意數量相同名字的CacheManager。每調用new CacheManager(...)一次,就會產生一個新的CacheManager實例,而不管已經存在多少個。調用CacheManager.create(...),則返回的是已經存在的那個配置對應的單例CacheManager,如果不存在,則創建一個。


2.5之后的版本,不允許在同一個JVM內存在多個具有相同名字的CacheManager。創建非單例實例的CacheManager()構造函數可能會打破這一規則,但是會拋出NPE異常。如果你的代碼要在同一個JVM創建多個同名的實例,請使用靜態方法CacheManager.create(),總是返回對應名的CacheManager(如果已經存在),否則創建一個。

 

事實上,我們可以直接利用Spring中的EhCacheManagerFactoryBean[spring2.5.4]來幫我們完成CacheManager的創建,看看它的具體創建方式:

if (this.shared) { // Shared CacheManager singleton at the VM level. if (this.configLocation != null) { this.cacheManager = CacheManager.create(this.configLocation.getInputStream()); } else { this.cacheManager = CacheManager.create(); } } else { // Independent CacheManager instance (the default). if (this.configLocation != null) { this.cacheManager = new CacheManager(this.configLocation.getInputStream()); } else { this.cacheManager = new CacheManager(); } } if (this.cacheManagerName != null) { this.cacheManager.setName(this.cacheManagerName); }



EhCache2.5.2及其以上版本的創建方法歸納如下:

  • CacheManager.newInstance(Configuration configuration) :創建一個新的CacheManager 對象或者返回已經存在的對應配置中名字的CacheManager
  • CacheManager.create():創建一個新的默認配置的單例CacheManager ,或者返回一個已經存在的單例。
  • CacheManager.create(Configuration configuration),創建一個對應傳入配置文件中名字的單例CacheManager,或者返回已經存在的單例CacheManager。
  • new CacheManager(Configuration configuration),創建一個新的CacheManager,或者如果對應配置的CacheManager已經存在或配置參數為空,拋出異常。

 

Instance Mode中,如果Cache均使用MemoryStore,則沒有什么特別需要注意的。但是如果使用了DIskStore,那么每個CacheManager必須具有不同的diskStore路徑。當一個新的CacheManager被創建的時候,需要檢查沒有別的CacheManager使用同樣的DiskStore路徑。如果有,就會拋出異常CacheException。如果CacheManager是集群中一部分,那么其監聽端口必須唯一。

 

SingletonmodeInstance Mode可以混合使用,而不會產生沖突。

 

Ehcache

所有的cache都實現了接口Ehcache。每個cache都有名字和屬性,且包含Element

Ehcache中的cache相當于其他緩存系統中的一塊緩存區域。

 

Element

Element是存放于cache中的原子單位。它有一個key、一個value以及關于訪問的記錄。Element被放進到cache或者從cache移除。他們也可能會由于過期被移除,這依賴于配置。


使用實例

下面給出了一個使用Ehcache的實際例子。

首先新建一個maven java工程,在pom.xml中添加Ehcache依賴。

<!-- Ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.3</version> </dependency>


下面是java代碼。代碼實現的功能非常簡單,即創建CacheManager,往里面存放一個Cache,然后往cache里面存數據和取數據,目的是展示Ehcache的基本使用。

/** * XXX.com Inc. * Copyright (c) 2004-2014 All Rights Reserved. */ package com.test.encache; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; /** * * @author XXX * @version $Id: EncacheTest.java, v 0.1 2014年8月8日 下午5:30:03 XXX Exp $ */ public class EncacheTest { //一些配置參數 //private final static String configFileName = "ehcache.xml"; //private final static int maxEntriesLocalHeap = 1000; private static CacheManager cacheManager; static String cacheName = "cache1"; public static void main(String[] args) { ehcacheSetUp(); ehcacheUse(); } private static void ehcacheSetUp() { cacheManager = CacheManager.create(); //CacheConfiguration configuration = new CacheConfiguration(configFileName, // maxEntriesLocalHeap); //Cache cache = new Cache(configuration); cacheManager.addCache(cacheName); } private static void ehcacheUse() { Cache cache1 = cacheManager.getCache(cacheName); String key = "key1"; String value = "value1"; writeSomeData(cache1, key, value); Element element = readSomeData(cache1, key, value); System.out.println(element); } private static void writeSomeData(Cache cache, String key, String value) { cache.put(new Element(key, value)); } private static Element readSomeData(Cache cache, String key, String value) { return cache.get(key); } }

程序輸出:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. [ key = key1, value=value1, version=1, hitCount=1, CreationTime = 1411807398768, LastAccessTime = 1411807398771 ]

其中的錯誤信息是因為沒有配置日志相關的SLF4J所致。


下面我們要配置日志。首先在pom.xml中添加依賴:

<!-- SLF4J --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.1</version> </dependency>
然后建立log4j的配置文件log4j.properties:

# Root logger option log4j.rootLogger=INFO, file, stdout log4j.logger.com.test.encache.EncacheTest=INFO,file # Direct log messages to a log file log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=C:logging.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


并且將這個文件放置到工程的classpath下,在這里我建立的是用Eclipse創建的maven工程,將其放置在工程主目錄下的 argetclasses文件夾下。
然后在代碼中添加logger的初始化代碼:
private static final Logger logger = LoggerFactory.getLogger(EncacheTest.class);

然后就可以使用了:

logger.info("Setup ehcache");

輸出:

2014-09-27 17:22:45 INFO EncacheTest:35 - Setup ehcache 2014-09-27 17:22:45 WARN ConfigurationFactory:136 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/MavenRepo/net/sf/ehcache/ehcache/2.8.3/ehcache-2.8.3.jar!/ehcache-failsafe.xml 2014-09-27 17:22:46 WARN DiskStorePathManager:162 - diskStorePath 'C:Usersxiajun.xjAppDataLocalTemp' is already used by an existing CacheManager either in the same VM or in a different process. The diskStore path for this CacheManager will be set to C:Usersxiajun.xjAppDataLocalTempehcache_auto_created7989392067865891865diskstore. To avoid this warning consider using the CacheManager factory methods to create a singleton CacheManager or specifying a separate ehcache configuration (ehcache.xml) for each CacheManager instance. [ key = key1, value=value1, version=1, hitCount=1, CreationTime = 1411809766273, LastAccessTime = 1411809766276 ]



 

參考資料:

源文檔 <http://ehcache.org/documentation/get-started/key-classes-methods> 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品一区二区三区视频在线观看免 | 日本护士xxxxx高清免费 | 女人18毛片a级毛片一区二区 | 中文字幕欧美日韩一 | 久久综合九色综合欧美狠狠 | 亚洲最大中文字幕 | 第一福利网站 | 波霸欧美性猛交xxxxxx | 国产午夜亚洲精品久久www | 国产香蕉一区二区在线网站 | 久久不卡免费视频 | 欧美性猛交xxxx免费看 | 欧美大逼逼| 国产欧美成人 | 成人乱码一区二区三区四区 | 国产成人精品一区二区三区 | 欧美成人午夜视频在线观看 | 麻豆精选传媒4区2021 | 国产精品网站在线观看 | 激情做人爱免费视频 | 亚洲欧美国产另类视频 | 欧美一区二区aa大片 | 污影院| 噜噜影院 | 久久99精品久久久久久综合 | 高清欧美色欧美综合网站 | 羞羞动漫网址 | 亚洲嫩草影院久久精品 | 日本午夜视频在线观看 | 国产精品卡哇伊小可爱在线观看 | 亚洲小说春色综合另类小说 | 成人免费淫片95视频观看网站 | 亚洲精品国产福利片 | 久久亚洲精品无码观看不卡 | 叼嘿视频在线观看免费 | 国产不卡高清在线观看视频 | 亚洲一区二区三区四区在线观看 | 日本免费大黄在线观看 | 亚洲精品图区 | 在线欧美69v免费观看视频 | 欧美日韩中文国产一区 |