当前位置:首页 > 开发 > 互联网 > 正文

Ehcache 入门

发表于: 2013-09-05   作者:antlove   来源:转载   浏览次数:
摘要: 一 Ehcache 简介 Ehcache是一个纯Java的进程内缓存框架。 对于缓存数据: 1.最原始的就是通过static静态变量将数据直接缓存在内容中 2.将部分数据缓存在内容中,部分缓存在磁盘上。因为可能内存容量不够。 Ehcache就可以将数据保存在内存和磁盘上。当然Ehcache保存数据的时候还可以配置各种策略。 但是Ehcache最实际的作用就是缓存数据在内存及磁盘上。

一 Ehcache 简介

Ehcache是一个纯Java的进程内缓存框架。

对于缓存数据:

1.最原始的就是通过static静态变量将数据直接缓存在内容中

2.将部分数据缓存在内容中,部分缓存在磁盘上。因为可能内存容量不够。

Ehcache就可以将数据保存在内存和磁盘上。当然Ehcache保存数据的时候还可以配置各种策略。

但是Ehcache最实际的作用就是缓存数据在内存及磁盘上。

 

二 Ehcache 简单Demo

CacheControllor.java

package com;
import java.io.InputStream;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;

public class CacheControllor {
	private static InputStream is=Main.class.getClassLoader().getResourceAsStream("com/ehcache.xml");
	private static CacheManager manager=new CacheManager(is);
	
	public static Cache addCache(String cacheName) {
		manager.addCache(cacheName);
		return manager.getCache(cacheName);
	}
	
	public static Cache getCache(String cacheName){
		return manager.getCache(cacheName);
	}
	
	public static void removeCache(String cacheName){
		manager.removeCache(cacheName);
	}

}

 DefaultCacheManagerEventListener.java

package com;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.Status;
import net.sf.ehcache.event.CacheManagerEventListener;
public class DefaultCacheManagerEventListener implements CacheManagerEventListener{
	@Override
	public void dispose() throws CacheException {
		System.out.println("==================== dispose ====================");
	}
	@Override
	public Status getStatus() {
		return Status.STATUS_ALIVE;
	}
	@Override
	public void init() throws CacheException {
		System.out.println("==================== init CacheManagerEventListenerfactory ====================");
	}
	@Override
	public void notifyCacheAdded(String str) {
		System.out.println("==================== notify cache added "+str+" ==================== ");
	}
	@Override
	public void notifyCacheRemoved(String str) {
		System.out.println("==================== notify cache removed "+str+" ==================== ");
	}
}

 DefaultCacheManagerEventListenerFactory.java

package com;

import java.util.Properties;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.event.CacheManagerEventListener;
import net.sf.ehcache.event.CacheManagerEventListenerFactory;

public class DefaultCacheManagerEventListenerFactory extends CacheManagerEventListenerFactory {
	@Override
	public CacheManagerEventListener createCacheManagerEventListener(
			CacheManager cacheManager, Properties props) {
		System.out.println("properties:" + props);
		return new DefaultCacheManagerEventListener();
	}
}

 ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="true" monitoring="autodetect"
         dynamicConfig="true">
    <!-- 设置磁盘存储目录 -->
    <diskStore path="C:\temp\ehcache"/>
    
    <!-- 设置CacheManagerEventListener,当cache被创建或者删除时,会调用listener的相关方法。 -->
    <cacheManagerEventListenerFactory class="com.DefaultCacheManagerEventListenerFactory" properties="1=1,2=2,3=3,4=4"/>

	<!-- 集群发现其他CacheManager -->
    <cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=automatic,
                        multicastGroupAddress=230.0.0.1,
                        multicastGroupPort=4446, timeToLive=1"
            propertySeparator=","
            />
            
     <!-- 监听集群中消息 -->
    <cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
    
    <!-- 
    	maxEntriesLocalHeap:设置堆内存中的最大存储对象。如果设置为0,则没有限制。
    	eternal: 是指保存元素是否是永久的,如果是,则超时设置会被忽略,元素永远不过期。
    	timeToIdleSeconds: 设置元素距上一次被访问最长的空闲时间。只有当eternal设置为false是才有效。如果设置0,表示永远不过期。默认值为0.
    	timeToLiveSeconds: 设置元素的最长生存时间。只有当eternal设置为false是才有效。 如果设置0,表示永远不过期。默认值为0.
    	diskSpoolBufferSizeMB: 设置磁盘缓冲区大小。默认值为30M。每一个磁盘缓冲区针对与各自的cache。 
    	maxEntriesLocalDisk: 设置堆内存中的最大存储对象。默认值为0.表示没有限制。
    	diskExpiryThreadIntervalSeconds: 磁盘失效线程运行间隔。默认值为120秒。
    	memoryStoreEvictionPolicy: 内存收获策略。默认为LRU. 其他可选为FIFO,LFU
    	sub tab persistence strategy:可选值 
    									localRestartable:将所有缓存对象拷贝到磁盘。重新启动后数据可以重新装载。只适用于企业版本。
    									localTempSwap:将所有缓存对象拷贝到磁盘。重新启动后数据将丢失。
    									none:不做持久化保存。默认模式。
    									distributed:依照<terracotta>持久层配置。
     -->       
	<defaultCache 
		maxEntriesLocalHeap="1" 
		eternal="false"
		timeToIdleSeconds="120" 
		timeToLiveSeconds="120" 
		diskSpoolBufferSizeMB="30"
		maxEntriesLocalDisk="10000000" 
		diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">
		<persistence strategy="localTempSwap" />
	</defaultCache>
             
</ehcache>

 测试类Main.java

package com;
import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;
public class Main {
	public static void main(String[] args) throws InterruptedException {
		Cache cache = CacheControllor.addCache("test");
		
		// 如果cache中存储的element对象数超过maxEntriesLocalHeap指定的对象数,
		// 则如果配置类persistence策略不为none,则在指定的目录下会生成.data临时文件
		for(int i=0;i<100;i++){
			cache.put(new Element("key_"+i,"value_"+i));
		}
		System.out.println(cache.getSize());
		
		CacheControllor.removeCache("test");
	}

}

 

Ehcache 入门

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、简介   ehcache是一个开源的,纯java进程内的缓存框架。它具有快速,简单,具有多种缓存策略
下面说明一下ehcache和spring整合配置。 1. 需要的jar包 slf4j-api-1.6.1.jar ehcache-core-2.1.0.j
1 简介 Ehcache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持内存和磁盘缓存,是一个非
1 简介 Ehcache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持内存和磁盘缓存,是一个非
简介: EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 Ca
1 简介 Ehcache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持内存和磁盘缓存,是一个非
1 简介 Ehcache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持内存和磁盘缓存,是一个非
1 简介 Ehcache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持内存和磁盘缓存,是一个非
1、缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传
hCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号