zoukankan      html  css  js  c++  java
  • Ehcache Demo

    转自:

    https://my.oschina.net/zb0423/blog/60957
    http://www.cnblogs.com/fsjin/articles/3521261.html

    Ehcache 是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大。

    • 下载jar包 ehcache-core-2.3.0.jar
    • maven 仓库代理  https://repository.jboss.org/nexus/content/groups/developer/
    • 新搭建一个Maven项目
    • 配置jar包到pom文件中
    • 编写ehcache.xml缓冲配置文件 可以放在src的任何目录下

    pom文件:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.lzyan.ehcache.demo</groupId>
      <artifactId>EhcacheDemo</artifactId>
      <version>v0.1</version>
      <name>EhcacheDemo</name>
      
      <dependencies>
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache-core</artifactId>
                <version>2.6.6</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.14</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.6</version>
            </dependency>
        </dependencies>
        
    </project>
    View Code

    ehcache.xml文件:

    <ehcache updateCheck="false" dynamicConfig="false">
        
        
        <!-- Sets the path to the directory where cache .data files are created.
    
             If the path is a Java System Property it is replaced by
             its value in the running VM.
    
             The following properties are translated:
             user.home - User's home directory
             user.dir - User's current working directory
             java.io.tmpdir - Default temp file path -->
        <diskStore path="D:/tmp/test/ehcache"/>
        
        <cacheManagerEventListenerFactory class="" properties=""/>
    
        <!--Default Cache configuration. These will applied to caches programmatically created through
            the CacheManager.
    
            The following attributes are required for defaultCache:
    
            maxInMemory       - Sets the maximum number of objects that will be created in memory
            eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
                                is never expired.
            timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
                                if the element is not eternal. Idle time is now - last accessed time
            timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
                                if the element is not eternal. TTL is now - creation time
            overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
                                has reached the maxInMemory limit.
            -->
        <defaultCache
            maxElementsInMemory="1000"
            eternal="false"
            timeToIdleSeconds="1200000"
            timeToLiveSeconds="1200000"
            overflowToDisk="true"
            />
    
        <cache name="icache-global"
            maxElementsInMemory="1000"
            eternal="true"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="1800"
            overflowToDisk="true"
            />
        
        <cache name="SimplePageCachingFilter"
               maxElementsInMemory="10000"
               maxElementsOnDisk="1000"
               eternal="false"
               overflowToDisk="true"
               timeToIdleSeconds="300"
               timeToLiveSeconds="600"
               memoryStoreEvictionPolicy="LFU"
                />
    </ehcache>
    View Code

    编写测试类:

    import java.net.URL;
    import java.util.concurrent.TimeUnit;
    
    import net.sf.ehcache.Cache;
    import net.sf.ehcache.CacheManager;
    import net.sf.ehcache.Element;
    
    public class EhCache_v2 {
        
        public static void main(String[] args) throws Exception {
            System.out.println("main(): begin ...");
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            URL url = loader.getResource("ehcache.xml");
            //创建一个缓存管理器
            CacheManager manager = CacheManager.create(url);
            String names[] = manager.getCacheNames();
            System.out.println("Available caches list: 
    ---------");
            for (int i = 0; i < names.length; i++) {
                System.out.println(names[i]);
            }
            System.out.println("---------");
            
            if(names.length > 0){
                System.out.println("Selected_CacheName=" + names[0]);
            }
            Cache cache = manager.getCache(names[0]);
            cache.put(new Element("name", "admin"));
            
            Element element = cache.get("name");
            System.out.println("getValue()=" + element.getValue());        
            Object obj = element.getObjectValue();
            System.out.println("getObjectValue()=" + obj);
            
            TimeUnit.SECONDS.sleep(3);
            
            ThreadAction action = new ThreadAction();
            action.setCacheName(cache.getName());
            action.setManager(manager);
            action.start();
    
            System.out.println("=== main thread is return! ===");
        }
        
    }
    
    class ThreadAction extends Thread{
        private String cacheName;
        private CacheManager manager ;
        
        
        @Override
        public void run() {
            try {
                Thread.sleep(3000);
                Cache cache = manager.getCache(cacheName);
                Element element = cache.get("name");
                System.out.println("run(): 从缓存中取得数据:" + element.getObjectValue());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
        }
        
        public CacheManager getManager() {
            return manager;
        }
        public void setManager(CacheManager manager) {
            this.manager = manager;
        }
    
        public String getCacheName() {
            return cacheName;
        }
        public void setCacheName(String cacheName) {
            this.cacheName = cacheName;
        }
    
    }
    View Code

    测试出缓存起作用:
    需要设置配置文件中缓存名 name="SimplePageCachingFilter"  的存活时间

    eternal="false"
    timeToIdleSeconds="1"
    timeToLiveSeconds="1"


    不知道什么缓存管理器读取配置文件的规则,取出的 name[0]  是文件最后一个配置的缓存
    然后再试运行 发现抛出空指针异常,说明从缓存中取不到数据了,说明这个测试可以测试出缓存是否起作用。

    Demo2:

    import net.sf.ehcache.Cache;
    import net.sf.ehcache.CacheManager;
    import net.sf.ehcache.Element;
    
    public class EhCache {
        
        public static void main(String[] args) {
            System.out.println("main(): begin ...");
            // CacheManager manager = new CacheManager();
            //创建一个缓存管理器
            CacheManager singletonManager = CacheManager.create();
            //建立一个缓存实例
            Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);
            //在内存管理器中添加缓存实例
            singletonManager.addCache(memoryOnlyCache);
            Cache cache = singletonManager.getCache("testCache");
            //使用缓存
            Element element = new Element("key1", "value1");
            cache.put(element);
            cache.put(new Element("key1", "value2"));
    
            element = cache.get("key1");
            Object value = element.getObjectValue();
            System.out.println(value);
    
            int elementsInMemory = cache.getSize();
            System.out.println(elementsInMemory);
    
            long elementsInMemory2 = cache.getMemoryStoreSize();
            System.out.println(elementsInMemory2);
    
            Object obj = element.getObjectValue();
            cache.remove("key1");
            System.out.println(obj);
            singletonManager.shutdown();
            // manager.shutdown();
            System.out.println("main(): over ...");
        }
        
    }
    View Code
  • 相关阅读:
    使用keepalived监控tomcat 达到双机热备
    nginx tomcat负载均衡 使用redis session共享
    Java线程安全和非线程安全
    Log4J日志配置详解
    使用java mail的网易smtp协议 发送邮件
    JavaScript-DOM(3)
    JavaScript-DOM(2)
    JavaScript-DOM(1)
    BOM简介
    JavaScript(数组、Date、正则)
  • 原文地址:https://www.cnblogs.com/ylz8401/p/6095071.html
Copyright © 2011-2022 走看看