Ehcache缓存数据

本文内容纲要:

- 1.ehcahe简介

- 2.作用

- 一是缓存数据库的数据。

- 二是存储变量。

- 3.简单运用

- 4.ehcache基本原理

1.ehcahe简介

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

看到官网上已经3.0了。

2.作用

我把它当做一个可以存储数据和读取数据的存在。缓存其实就一个key-value的数据存储工具。目前我使用过两个方面。

一是缓存数据库的数据。

都说连接数据库的开销很大,所以对数据变化较小的一部分可以缓存起来,下次直接从缓存中取数据。(关于数据的安全性未曾考虑)。

二是存储变量。

在web后端开发过程中,有些数据需要保存起来方便下次使用。比如短信的验证码。我之前都是在类中添加一个map类变量,然后存入map,下次取出或者销毁。这样做事可以的,类实例化后。类变量就加载到内存中了,可以存储数据。但有个问题,关于类的创建和销毁的声明周期问题。不能确保他什么时候去销毁。或者说,这一块我了解有限,还没研究到。

因此,放到缓存中就可以了。缓存可以设置数据的大小,失效时间。

3.简单运用

(1)概述

Ehcache是一个纯Java的进程内缓存框架,具有快速‘精干等特点。

本文基于2.10.X以上版本

(2)在pom.xml添加相关包依赖

<!--  ehcache缓存包-->

<dependency>

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

<artifactId>ehcache</artifactId>

</dependency>

<!-- spring-context-support包含有Spring对于缓存功能的抽象封装接口-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

</dependency>

(3)HelloWorld实例使用Ehcache缓存

1.在classpath下添加ehcache.xml配置文件,添加一个名为helloworld的缓存

--------------------------------------------------------------------------------------------------------------

<?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"/>

<!-- helloworld缓存 -->

<cache name="helloworld"

maxElementsInMemory="1000"

eternal="false"

timeToIdleSeconds="5"

timeToLiveSeconds="5"

overflowToDisk="false"

memoryStoreEvictionPolicy="LRU"/>

</ehcache>

-------------------------------------------------------------------------------------------------------

ehcache.xml配置参数说明:

  • name:缓存名称。

  • maxElementsInMemory:缓存最大个数。

  • eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。

  • timeToIdleSeconds:置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

  • timeToLiveSeconds:缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。

  • maxEntriesLocalDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。

  • overflowToDisk:内存不足时,是否启用磁盘缓存。

  • diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

  • maxElementsOnDisk:硬盘最大缓存个数。

  • diskPersistent:是否在VM重启时存储硬盘的缓存数据。默认值是false。

  • diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。

  • memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。

  • clearOnFlush:内存数量最大时是否清除。


    2.EhcacheDemo.java文件

    Ehcache会自动加载classpath根目录下名为ehcache.xml文件。

    EhcacheDemo的工作步骤如下:

    在EhcacheDemo中,我们引用ehcache.xml声明的名为helloworld的缓存来创建Cache对象;

    然后我们用一个键值对来实例化Element对象;

    将Element对象添加到Cache;

    然后用Cache的get方法获取Element对象。

    package com.agesun.attendance.web.controller;

    import net.sf.ehcache.Cache;

    import net.sf.ehcache.CacheManager;

    import net.sf.ehcache.Element;

    public class EhcacheDemo {

    public  static  void main(String[] args){

    // Create a cache manager 创建缓存管理者

    final CacheManager cacheManager=new CacheManager();

    // create the cache called "helloworld" 引用ehcache.xml申明的的名为helloworld的缓存创建Cache对象

    final Cache cache=cacheManager.getCache("helloworld");

    // create a key to map the data to

    final String key="greeting";

    // Create a data element

    final Element putGreeting=new Element(key,"Hello,World!");

    // Put the element into the data store //将map对象放到cache缓存里

    cache.put(putGreeting);

    // Retrieve the data element //从cache对象中获得到元素

    final Element getGreeting=cache.get(key);

    // Retrieve the data element

    System.out.println(getGreeting.getObjectValue());

    }

    }


    输出:

Image

(4)Ehcache基本操作

Element、Cache、cacheManager是Ehcacle最重要的API

Element:缓存的元素,维护着一个键值对

Cache:是Ehcache的核心类,他有多个Element,并被CacheManager管理,它实现了对缓存的逻辑行为

CacheManager:Cache的容器对象, 并管理着Cache的生命周期。

4.ehcache基本原理

ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。同时ehcache作为开放源代码项目,采用限制比较宽松的Apache License V2.0作为授权方式,被广泛地用于Hibernate, Spring,Cocoon等其他开源系统。

Ehcache的类层次模型主要为三层,最上层的是CacheManager,他是操作Ehcache的入口。我们可以通过CacheManager.getInstance()获得一个单个的CacheManager,或者通过CacheManager的构造函数创建一个新的CacheManager。每个CacheManager都管理着多个Cache。而每个Cache都以一种类Hash的方式,关联着多个Elemenat。而Element则是我们用于存放要缓存内容的地方。

ehcache的刷新策略 ehcache的刷新策略是当缓存在放入的时候记录一个放入时间,它是用Lazy Evict的方式,在取的时候同设置的TTL比较

ehcache缓存的3种清空策略: 1 FIFO,先进先出 2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

事件处理 可以为CacheManager添加事件监听,当对CacheManager增删Cache时,事件处理器将会得到通知。要配置事件处理,需要通过ehcache的配置文件来完成。 可以为Cache添加事件监听,当对Cache增删Element时,事件处理器将会得到通知。要配置事件处理,需要通过ehcache的配置文件来完成。

本文内容总结:1.ehcahe简介,2.作用,一是缓存数据库的数据。,二是存储变量。,3.简单运用,4.ehcache基本原理,

原文链接:https://www.cnblogs.com/tongcc/p/11269339.html

以上是 Ehcache缓存数据 的全部内容, 来源链接: utcz.com/z/296575.html

回到顶部