• EhCache缓存的使用


    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider

     

    我们使用EhCache缓存框架主要是为了判断重复Url,每次爬取一个网页,都把Url存储到缓存中,并且每次爬某个网页之前,都去缓存中搜索下,假如存在的话,我们就不要爬取这个网页了,不存在的话,我们就爬下网页,爬取成功后,把这个Url存储到缓存中;之所以用缓存框架,主要是速度快,相对于传统数据库;

     

    Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持RESTSOAP api等特点。

    Ehcache最初是由Greg Luck2003年开始开发。2009,该项目被Terracotta购买。软件仍然是开源,但一些新的主要功能(例如,快速可重启性之间的一致性的)只能在商业产品中使用,例如Enterprise EHCache and BigMemory。维基媒体Foundationannounced目前使用的就是Ehcache技术。

     

    主要的特性有:

    1. 快速

    2. 简单

    3. 多种缓存策略

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

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

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

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

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

    9. 提供Hibernate的缓存实现

     


    EhCache最新版本是3.X 本人一直用的是2.X 比较稳定 功能足够用;

    所以还是用2.X版本;

     

    我们新建一个Maven项目,

    pom.xml里引入 ehcache支持;

    <dependency>

    <groupId>net.sf.ehcache</groupId>

    <artifactId>ehcache</artifactId>

    <version>2.10.3</version>

    </dependency>


    ehcache.xml配置文件

    https://img-blog.csdnimg.cn/20181229103154209

    <?xml version="1.0" encoding="UTF-8"?>
    
    <ehcache>
    
    <!--
    
    磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
    
    path:指定在硬盘上存储对象的路径
    
    -->
    
    <diskStore path="D:ehcache" />
    
    <!--
    
    defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
    
    maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
    
    eternal:代表对象是否永不过期
    
    overflowToDisk:当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中
    
    -->
    
    <defaultCache
    
    maxElementsInMemory="100"
    
    eternal="true"
    
    overflowToDisk="true"/>
    
    <cache
    
    name="a"
    
    maxElementsInMemory="100"
    
    eternal="true"
    
    overflowToDisk="true"/>
    
    </ehcache>
    
    ​

    我们再新建一个测试类:

    https://img-blog.csdnimg.cn/20181229103154318

    执行完之后的结果

    https://img-blog.csdnimg.cn/20181229103154372

    ​​


    如果想直接存储到本地

    https://img-blog.csdnimg.cn/20181229103154417

    ​​

    <?xml version="1.0" encoding="UTF-8"?>
    
    <ehcache>
    
    <!--
    
    磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
    
    path:指定在硬盘上存储对象的路径
    
    -->
    
    <diskStore path="D:ehcache" />
    
    <!--
    
    defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
    
    maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
    
    eternal:代表对象是否永不过期
    
    overflowToDisk:当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中
    
    -->
    
    <defaultCache
    
    maxElementsInMemory="100"
    
    eternal="true"
    
    overflowToDisk="true"/>
    
    <!--
    
    maxElementsInMemory设置成1,overflowToDisk设置成true,只要有一个缓存元素,就直接存到硬盘上去
    
    eternal设置成true,代表对象永久有效
    
    maxElementsOnDisk设置成0 表示硬盘中最大缓存对象数无限大
    
    diskPersistent设置成true表示缓存虚拟机重启期数据
    
    -->
    
    <cache
    
    name="a"
    
    maxElementsInMemory="1"
    
    eternal="true"
    
    overflowToDisk="true"
    
    maxElementsOnDisk="0"
    
    diskPersistent="true"/>
    
    </ehcache>
    
    ​

    执行完之后

    会发现你指定的目录已经有了缓存文件了

    https://img-blog.csdnimg.cn/20181229103154480

    该技术对于10万以内的爬虫数据有效,不推荐使用于10W以上的数据。​​​​

     

  • 相关阅读:
    linux sort,uniq,cut,wc命令详解
    Linux IO实时监控iostat命令详解
    uniq命令
    四层和七层负载均衡的区别
    keepalived 和 heartbeat对比
    LVS+Keepalived实现负载均衡
    Lvs+heartbeat高可用高性能web站点的搭建
    使用 awk 过滤文本或文件中的字符串
    最全mysql的复制和读写分离
    伤不起
  • 原文地址:https://www.cnblogs.com/chengxiaolong/p/10206333.html
Copyright © 2020-2023  润新知