zoukankan      html  css  js  c++  java
  • Ehcache基础入门

    1. 基本介绍

    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

    Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache),但本身不直接提供缓存功能的实现。它支持注解方式使用缓存,非常方便。

    2. 主要的特性有:

    1. 快速

    2. 简单

    3. 多种缓存策略

    4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题

    5. 缓存数据会在虚拟机重启的过程中写入磁盘

    6. 可以通过RMI、可插入API等方式进行分布式缓存

    7. 具有缓存和缓存管理器的侦听接口

    8. 支持多缓存管理器实例,以及一个实例的多个缓存区域

    9. 提供Hibernate的缓存实现

    3. 集成

    可以单独使用,一般在第三方库中被用到的比较多(如mybatis、shiro等)ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用

    4. ehcache 和 redis 比较

    • ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

    • redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,  处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

    ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。

    ehcache使用

    1、在pom.xml中引入依赖

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

    2、在src/main/resources/创建一个配置文件 ehcache.xml

    默认情况下Ehcache会自动加载classpath根目录下名为ehcache.xml文件,也可以将该文件放到其他地方在使用时指定文件的位置

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    
      <!-- 磁盘缓存位置 -->
      <diskStore path="java.io.tmpdir/ehcache"/>
    
      <!-- 默认缓存 -->
      <defaultCache
              maxEntriesLocalHeap="10000"
              eternal="false"
              timeToIdleSeconds="120"
              timeToLiveSeconds="120"
              maxEntriesLocalDisk="10000000"
              diskExpiryThreadIntervalSeconds="120"
              memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
      </defaultCache>
    
      <!-- helloworld缓存 -->
      <cache name="HelloWorldCache"
             maxElementsInMemory="1000"
             eternal="false"
             timeToIdleSeconds="5"
             timeToLiveSeconds="5"
             overflowToDisk="false"
             memoryStoreEvictionPolicy="LRU"/>
    </ehcache>

    3、测试类

    package com.mengdee.manage.cache;import com.mengdee.manage.entity.Dog;import net.sf.ehcache.Cache;import net.sf.ehcache.CacheManager;import net.sf.ehcache.Element;public class CacheTest {
    
        public static void main(String[] args) {        // 1. 创建缓存管理器
            CacheManager cacheManager = CacheManager.create("./src/main/resources/ehcache.xml");        // 2. 获取缓存对象
            Cache cache = cacheManager.getCache("HelloWorldCache");        // 3. 创建元素
            Element element = new Element("key1", "value1");        // 4. 将元素添加到缓存
            cache.put(element);        // 5. 获取缓存
            Element value = cache.get("key1");
            System.out.println(value);
            System.out.println(value.getObjectValue());        // 6. 删除元素
            cache.remove("key1");
    
            Dog dog = new Dog(1L, "taidi", (short)2);
            Element element2 = new Element("taidi", dog);
            cache.put(element2);
            Element value2 = cache.get("taidi");
            Dog dog2 = (Dog) value2.getObjectValue();
            System.out.println(dog2);
    
            System.out.println(cache.getSize());        // 7. 刷新缓存
            cache.flush();        // 8. 关闭缓存管理器
            cacheManager.shutdown();
        }
    }










    QQ群:785071190
    查看原文:http://www.coder306.cn/?p=206
  • 相关阅读:
    201521123088《JAVA程序设计》第8周学习总结
    201521123088《Java程序设计》第七周学习总结
    201521123088《Java程序设计》第6周学习总结
    201521123088《JAVA程序设计》第5周学习总结
    网络15软工个人作业5——软件工程总结
    alpha阶段个人总结
    软件工程网络15个人作业3--案例分析
    结对编程 201521123027
    软件工程网络15个人阅读作业2--提出问题(201521123027 陈龙)
    软件工程网络15个人阅读作业1(201521123027 陈龙)
  • 原文地址:https://www.cnblogs.com/coder306/p/13087673.html
Copyright © 2011-2022 走看看