Java缓存框架使用EhCache结合Spring AOP

Java缓存框架使用EhCache结合Spring AOP

一.Ehcache简介 
    EhCache是一个纯Java的进程内缓存框架,具有如下特点:
    1. 快速简单,非常容易和应用集成。
    2.支持多种缓存策略 。
    3. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 。
    4. 缓存数据会在虚拟机重启的过程中写入磁盘 。
    5. 可以通过RMI、可插入API等方式进行分布式缓存。
    6. 具有缓存和缓存管理器的侦听接口 。
    7. 支持多缓存管理器实例,以及一个实例的多个缓存区域 等特点。

二.Ehcache配置的相关参数 
    Ehcache 的配置很灵活,官方提供的配置方式有好几种,你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。下面以最常用的XML 配置为例说下配置的相关参数的意义,ehcache.xml是最常见的一个文件,ehcache一般会通过CacheManager从classpath 加载该文件完成Cache的实例化。
    
    1.ehcache.xml中的配置信息
        ehcache.xml片段:

      <ehcache><diskStore path="java.io.tmpdir"/><defaultCachename="name"maxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"/></ehcache>

 

     2.Cache中常用参数的具体意义
        (1)name:Cache的唯一标识。
        (2)maxElementsInMemory:内存中最大缓存对象数。
        (3)eternal:Element是否永久有效,一旦设置true,timeout将不起作用。
        (4)timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
        (5)timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。
        (6)overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。
        (7)maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。
        (8) memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略 去清理缓存中的内容。默认策略是LRU(最近最少使用),你也可以设置为FIFO(先进先出)或是LFU(较少使用) 
    
三.Spring和Ehcache的集成 
    1.ehcache.xml

 

    2.beans.xml的配置

 <bean id="cacheManager"class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><property name="configLocation"><value>classpath:ehcache.xml</value></property></bean><bean id="levelOneCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"><property name="cacheManager"><ref local="cacheManager" /></property><property name="cacheName"><value>configCache</value></property></bean>

 

    3.测试类

        输出如下:

        cacheObject[name:test],无法从缓存中取到cacheObject[name:test],从缓存中取到cacheObject[name:test],从缓存中取到cacheObject[name:test],从缓存中取到cacheObject[name:test],从缓存中取到

        
四.利用Spring AOP和Ehcache实现线程级方法缓存 
    在复杂的业务逻辑或在一次计算中需多次调用同一个DAO或远程服务,在这种情况下,均可对计算结果缓存起来,不但可以减少了不必要的调用次数,还同时可以提高系统运算性能。下面以缓存一个service为例说明一下其用法。
    
    1.TestService接口

    
    2.TestServiceImpl实现类

 

    3.拦截器的实现

    4.Bean的配置

 

    5.测试方法

 

        其输出结果如下:

 第一次调用方法并缓存其值:mango
从缓存中取得的值为:mango
从缓存中取得的值为:mango
从缓存中取得的值为:mango
从缓存中取得的值为:mango

转载于:https://www.cnblogs.com/mengyuxin/p/6396269.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python vba 秒出结果_为什么公司每天用20个人手工处理数据出报告,也不用5个会vba,python的人来制作??...

逼呼上无数人反复在说&#xff1a;先问是不是&#xff0c;再问为什么&#xff01;不是没有道理啊&#xff01;&#xff01;&#xff01;可能题主所在单位是这种情况&#xff0c;你看到处理数据出报告的人都不会VBA&#xff0c;也不会python&#xff0c;但是并不是所有单位都这样…

java 并发 set_高并发下的Java数据结构(List、Set、Map、Queue)

1.并发ListVector 或者 CopyOnWriteArrayList 是两个线程安全的List实现&#xff0c;ArrayList 不是线程安全的。因此&#xff0c;应该尽量避免在多线程环境中使用ArrayList。如果因为某些原因必须使用的&#xff0c;则需要使用Collections.synchronizedList(List list)进行包装…

知识图谱和图分析与可视化

来源&#xff1a;知链数据“知识图谱和图分析与可视化”这个题目看起来比较大&#xff0c;我尝试基于本人的一些图数据可视化与分析经验&#xff0c;对知识图谱和图分析与可视化之间的关系进行简单梳理&#xff0c;并分享一些以知识图谱为代表的图数据与图可视化、图分析结合进…

python 生成器装饰器_4.python迭代器生成器装饰器

基本概念1.容器(container)容器是一种把多个元素组织在一起的数据结构&#xff0c;容器中的元素可以逐个地迭代获取&#xff0c;可以用in, not in关键字判断元素是否包含在容器中。通常这类数据结构把所有的元素存储在内存中(也有一些特例&#xff0c;并不是所有的元素都放在内…

java开源对象池_JAVA 对象池

GenericObjectPool利用一个org.apache.commons.collections.CursorableLinkedList对象来保存对象池里的对象。这种对象池的特色是&#xff1a;可以设定最多能从池中借出多少个对象。可以设定池中最多能保存多少个对象。可以设定在池中已无对象可借的情况下&#xff0c;调用它的…

新一代人工智能专利分析

来源&#xff1a;三思派人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;自诞生以来&#xff0c;已经过约60年的发展。2006年深度学习算法的重大突破带来了人工智能的第三次爆发。同时也引发专利申请的激增&#xff0c;2006年至2016年&#xff0c;十年的…

MYSQL性能优化详解(二)

接着上一篇学习&#xff1a;http://www.cnblogs.com/quanzhiguo/p/6401453.html 七、MySQL数据库Schema设计的性能优化 高效的模型设计 适度冗余-让Query尽两减少Join 大字段垂直分拆-summary表优化 大表水平分拆-基于类型的分拆优化 统计表-准实时优化 合适的数据类型 时间存储…

python if else用法同一行_在Python的同一行中使用if else for和del吗?-问答-阿里云开发者社区-阿里云...

我有一个列表&#xff0c;其项目是可变长度的列表。如果这些可变长度的列表项超过此长度&#xff0c;则需要将其截断为特定长度(x)。我做了这个小的功能。def truncateList(batch_, trim_len):truncated_list []for eachAbstract in train_abstracts_encoded:if len(eachAbstr…

java no resultset_jdbc - Java ResultSet如何检查是否有任何结果

jdbc - Java ResultSet如何检查是否有任何结果结果集没有hasNext的方法。 我想检查resultSet是否有任何值这是正确的方法if (!resultSet.next() ) {System.out.println("no data");}kal asked 2019-02-19T19:16:57Z21个解决方案472 votes假设您正在使用新返回的Resul…

图解谷歌大脑丶城市大脑丶全球脑与互联网大脑的关系

人类很早就朦胧的发现社会组织具有神经系统的特征。19世纪到20世纪&#xff0c;一些前瞻的哲学家们开始不断将科技与脑进行了关联,提出了"器官映射","社会神经网络","全球脑"。 21世纪之后,更多科技大脑概念不断涌现,从互联网大脑到城市大脑,从谷…

Ubuntu 安装调整工具移动 Launcher 启动器位置

问题&#xff1a;如何将 Ubuntu 16.04 屏幕左侧的 Launcher 启动器由屏幕底部移动到屏幕左侧。 Ubuntu 16.04 最新的 unity-tweak-tool 工具&#xff0c;已经为用户提供了通过图形界面&#xff0c;实现上述 Launcher 启动器位置移动的功能。 1、在终端中执行&#xff1a; sudo …

python求助神器_python三大神器

Python 中有很多优秀的包&#xff0c;本文主要讲一下 pip, virtualenv, fabric1. pip 用来包管理1 #安装&#xff0c;可指定版本号2 (sudo) pip install Django1.6.834 #升级5 (sudo) pip install bpython --upgrade67 #一次安装多个8 (sudo) pip install BeautifulSoup4 fabri…

滴滴自动驾驶CEO张博:十年内无人驾驶对消费者没有吸引力丨厚势汽车

来源&#xff1a;WAVE2019张博&#xff1a;在 2012 年滴滴创立的时候&#xff0c;我们是一个非常简单的想法。我们发现在打出租车的场景下&#xff0c;无论是司机还是乘客效率都非常低。在滴滴出现之前&#xff0c;一个乘客想要打出租车必须要下楼招一下手&#xff0c;这个信号…

garch预测 python_数据科学方面的Python库,实用!

作者&#xff1a;Python开发与大数据人工智能原文&#xff1a;公众号 Python开发与大数据人工智能Python是一种很棒的编程语言。事实上&#xff0c;它还是世界上发展最快的编程语言之一。它一次又一次证明了它在数据科学职位中的实用性。整个Python及其库的生态系统使其成为全世…

纯js实现html转pdf

项目开发中遇到了一个变态需求&#xff0c;需要把一整个页面导出为pdf格式&#xff0c;而且要保留页面上的所有的表格、svg图片和样式。 简而言之&#xff0c;就是希望像截图一样&#xff0c;把整个页面截下来&#xff0c;然后保存成pdf。 咋不上天呢…… 查了一下&#xff0c;…

java 判断是linux系统_java判断是window系统还是Linux系统,并获取其IP地址及文件上传 | 学步园...

这是upload类的方法&#xff1a;public class Upload {public static String upload(FormFile formfile,String dirPath,int port){String savePath"";String ip"";try{String filename formfile.getFileName().trim(); // 文件名if (!"".equal…

物联网中的推荐系统

来源&#xff1a;北京物联网智能技术应用协会作者 | Alexander Felfernig, Seda Polat Erdeniz编译 | CDA数据科学研究院Recommender systems in the Internet of Things1、背景介绍物联网是一种联网的基础架构&#xff0c;是物联网、互联网和语义学领域之间融合的结果&#xf…

pwm控制的基本原理_单片机PWM控制基本原理详解~

PWM是Pulse Width Modulation的缩写&#xff0c;它的中文名字是脉冲宽度调制&#xff0c;一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术&#xff0c;其实就是使用数字信号达到一个模拟信号的效果。这是个什么概念呢&#xff1f;我们一步步来介绍。首…

关上Deepfake的潘多拉魔盒,RealAI推出深度伪造视频检测工具

诞生之初&#xff0c;Deepfake是一项有趣的图像处理技术&#xff0c;仅仅带来搞笑和娱乐视频&#xff0c;但殊不知&#xff0c;潘多拉魔盒就此被打开&#xff0c;催生出色情黑产、恶搞政客“操纵”民意&#xff0c;Deepfake正逐步进化为一种新型“病毒”&#xff0c;人类伦理道…

java 解析 csv_在Java中将数据从CSV解析到数组

我正在尝试将CS​​V文件导入到可以在Java程序中使用的数组中. CSV文件已成功导入自身,输出显示在终端上,但它会引发错误&#xff1a;Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1at CompareCSV.main(CompareCSV.java:19)在末尾.另外,当…