文档章节

Ehcache的简单使用

森提尼斯
 森提尼斯
发布于 2015/11/30 12:03
字数 913
阅读 68
收藏 0

前段时间公司的新项目要求使用Hibernate二级缓存,近期通过在网上也看了不少帖子。

ehcache是一个非常轻量级的框架,1.2以后就支持了集群,并且是Hibernate默认的缓存provider.

主要特性
     1. 快速.
     2. 简单.
     3. 多种缓存策略
     4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
     5. 缓存数据会在虚拟机重启的过程中写入磁盘
     6. 可以通过RMI、可插入API等方式进行分布式缓存
     7. 具有缓存和缓存管理器的侦听接口
     8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
     9. 提供Hibernate的缓存实现
     10. 等等

下面是我的一些使用心得。

既然是hibernate二级缓存 首先当然要配置Hibernate了,我使用的是Hibernate3.3。

然后在src目录下创建ehcache.xml文件

ehcache.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">  
    <!-- 设置磁盘缓存路径 -->
    <diskStore path="d:/diskStore/"></diskStore>
    <!-- 默认配置,所有的类都遵循这个配置 -->
    <defaultCache
         maxElementsInMemory="100000"
        eternal="false" 
        timeToIdleSeconds="25"
        timeToLiveSeconds="25"
        overflowToDisk="true"
        
        />
    <!-- 为某各类单独配置 -->
    <cache 
        name="com.example.entity.Students"
        maxElementsInMemory="100"
        enternal="false"
        timeToIdleSeconds="10000"
        timeToLiveSeconds="10000"
        memoryStoreEvictionPolicy="LRU"
        overflowToDisk="true"/>
    
</ehcache>

maxElementsInMemory:设置缓存中可以存放多少个对象。

eternal:设置缓存是否过期 值为true时则缓存永不过期,一旦设置了,那么timeToIdleSeconds和timeToLiveSeconds将失效

timeToIdleSeconds: 设置一个对象被访问后多少秒没有被再次访问就失效。0为无穷大

timeToLiveSeconds: 设置对象在创建以后多少秒没有被访问就失效。0为无穷大。

overflowToDisk:设置当缓存对象超过设置最大值时是否存入磁盘中。

memoryStoreEvictionPolicy:当缓存中对象超过maxElementsInMemory所设置的值后,ehcache将会根据指定的策略去清理内存,默认清理策略为 LRU (最少使用)。也可以设置为FIFO(先进先出)策略。

maxElementsOnDisk : 设置缓存对象在磁盘中的最大数量,0表示无限制。仅在overflowToDisk设置为true时有效。

diskSpoolBufferSizeMB: 设置磁盘缓存区的大小MB为单位。默认30MB。

diskStore: 设置当缓存数量大于maxElementsInMemory设置的值是缓存到磁盘中的位置。仅在overflowToDisk为true时有效。path有四种设置方法,1、直接设置路径。2、user.home用户主目录.3、user.dir用户当前工作目录。4、java.io.tmpdir默认临时缓存目录。


配置好ehcache.xml文件后,要配置Hibernate配置文件.

在配置文件中写入:

        <!-- 配置缓存提供类 -->
        <property name="hibernate.cache.provider_class">
            org.hibernate.cache.EhCacheProvider
        </property>

        <!-- 启用二级缓存,这也是它的默认配置 -->
        <property name="hibernate.cache.use_second_level_cache">
            true
        </property>
        <!-- 启用查询缓存 -->
        <property name="hibernate.cache.use_query_cache">true</property>
        <mapping resource="com/example/entity/Students.hbm.xml" />
        <class-cache usage="read-write" class="com.example.entity.Students"
            region="com.example.entity.Students" />

缓存提供类。2.1以上是这个。2.1以下为net.sf.hibernate.cache.EhCache。还有4.0以上应该不是这个文件了。

class-cache:设置缓存持久类。usage:设置缓存可读写。class:持久类全类名。region与ehcache中cache设置的name属性相同。不设置则为默认缓存策略。

设置持久类缓存有三种方法class-cache为其中一种。我看用着清晰方便就用的这种。还有一种注解形式,因为本人注解用的不太好所有没有研究这个。第三种方法就是,在Hibernate映射的*.hbm.xml文件中class标签下第一行设置

<cache usage="read-write"/>

 注:SSH中hibernate配置的cache信息

1 <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>






© 著作权归作者所有

森提尼斯

森提尼斯

粉丝 1
博文 19
码字总数 7014
作品 0
哈尔滨
程序员
私信 提问
ehcache整合spring注解方式

一、简介   在hibernate中就是用到了ehcache 充当缓存。spring对ehcache也提供了支持,使用也比较简单,只需在spring的配置文件中将ehcache的ehcache.xml文件配置进去即可。在spring中使用...

烟火_
2014/11/23
0
0
ehcache缓存使用及与spring集成

1.ehcache简介 ehcache是一个Java进程内缓存框架,有如下特点: 快速简单,容易集成 支持多种缓存策略 缓存数据有两级:内存和磁盘, 无需担心容量问题 缓存数据会在虚拟机重启的过程写入磁盘 ...

陈小扁
2016/04/26
362
0
ehcache使用

Ehcache 整合Spring 使用页面、对象缓存 Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如...

机智如wo
2016/07/25
78
0
BigMemory系列文章--2.Ehcache快速接入

转载请注明出处哈:http://carlosfu.iteye.com/blog/2237511 一、依赖 1. ehcache依赖 2.6.11 2. ehcache依赖树: mvn dependency:tree [INFO] - net.sf.ehcache:ehcache-core:jar:2.6.11:com......

付磊-起扬
2015/08/23
0
0
分布式改造剧集三:Ehcache分布式改造

第三集:分布式Ehcache缓存改造 前言 好久没有写博客了,大有半途而废的趋势。忙不是借口,这个好习惯还是要继续坚持。前面我承诺的第一期的DIY分布式,是时候上终篇了---DIY分布式缓存。 探...

槟城码农
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部