Ehcache介绍及整合Spring实现高速缓存

转载自 Ehcache介绍及整合Spring实现高速缓存


Ehcache介绍


EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它使用的是JVM的堆内存,超过内存可以设置缓存到磁盘,企业版的可以使用JVM堆外的物理内存。


Spring整合Ehcache




首先加入最新的ehcache的maven依赖


<!-- ehcache -->

<dependency>

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

        <artifactId>ehcache</artifactId>

        <version>2.10.4</version>

</dependency>


在Spring配置文件中加入如下配置


<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

        <property name="configLocation" value="classpath:ehcache.xml" />

</bean>


<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">

        <property name="cacheManager" ref="ehcache" />

</bean>

<cache:annotation-driven cache-manager="cacheManager" />


在classpath中加入ehcache的配置文件ehcache.xml


<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:noNamespaceSchemaLocation="ehcache.xsd"

         updateCheck="false" 

         monitoring="autodetect"

         dynamicConfig="true"

         maxBytesLocalHeap="800M"

         maxBytesLocalDisk="200G">


    <diskStore path="./cache"/>


    <!-- 永不过期 -->

    <defaultCache 

         eternal="true"  

            overflowToDisk="true"  

            diskPersistent="true"  

            memoryStoreEvictionPolicy="LRU" 

   />

        

   <!-- 缓存一天 -->

   <cache name="oneDayCache" 

         eternal="false"  

            timeToIdleSeconds="0" 

            timeToLiveSeconds="86400" 

            overflowToDisk="true"  

            diskPersistent="true"  

            diskExpiryThreadIntervalSeconds="1800" 

            memoryStoreEvictionPolicy="LRU" 

    /> 

</ehcache>


配置文件说明


Spring Cache的Cacheable注解不支持失效时间设置,所以只能在ehcache.xml上面设计缓存。上面的配置文件配置了两种缓存,一种永久不过期的,一种缓存1小时,更多时限的在后面加就行。


参数说明


updateCheck: 建议关闭ehcache的自动更新,不然每次启动都要去官网更新

monitoring:自动检测

dynamicConfig: 支持动态改变配置


maxBytesLocalHeap: 最大堆内存使用,单位可为K,M,G

maxBytesLocalDisk: 最大磁盘使用,单位可为K,M,G


maxBytesLocalHeap、maxBytesLocalDisk这两个是定义在总配置上的,不过也可以指定到具体的缓存上面去,不过最大容量以总配置上面的大小为准。


diskStore:指定数据存储位置,可指定磁盘中的文件夹位置

defaultCache: 默认的管理策略  


以下属性是必须的


name: Cache的名称,必须是唯一的,ehcache会把这个cache放到HashMap里去。


maxElementsInMemory:在内存中缓存的element的最大数目。

maxElementsOnDisk:在磁盘上缓存的element的最大数目,默认值为0,表示不限制。  

 

eternal:设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。   


overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上。   

  

以下属性是可选的:  

timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。 

 

timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。  


diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。   


diskExpiryThreadIntervalSeconds: 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。   


diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。   


memoryStoreEvictionPolicy: 如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。   


缓存的3 种清空策略

FIFO-first in first out (先进先出)。

LFU-Less Frequently Used (最少使用),意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。  

LRU -Least Recently Used(最近最少使用),(ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。



缓存使用


使用Spring提供的注解即可,传入vaue,key等注解需要的参数。



@Cacheable:先查缓存,有则不进行方法,没有就进行方法再缓存起来。


@CachePut:每次都执行方法,再放入缓存。


@CacheEvict:让缓存失效。


@Caching:以上3种注解可以组合使用。


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

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

相关文章

转:使用 Tkprof 分析 ORACLE 跟踪文件

【README】 昨天在验证oracle 数据库性能的时候&#xff0c;查询日志中 打出了 exec time , fetch time 不懂什么意思&#xff0c;所以就记录了下&#xff1b; A 表 680w&#xff0c; count 耗时5秒&#xff1b; B表 2013w&#xff0c; count 耗时10秒&#xff1b; A inne…

浅谈大型网站之负载均衡架构

转载自 浅谈大型网站之负载均衡架构 概念 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其意思就是分摊到多个操作单元上进行执行&#xff0c;例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等&#xff0c;从而共同完成工作任务。 负载均衡建立…

单词拆分

作者&#xff1a;xiao_ben_zhu 链接&#xff1a;https://leetcode-cn.com/problems/word-break/solution/shou-hui-tu-jie-san-chong-fang-fa-dfs-bfs-dong-tai/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获得授权&#xff…

centos Error: Cannot find a valid baseurl for repo: base 解决方法

参考 https://arstech.net/centos-6-error-yumrepo-error-all-mirror-urls-are-not-using-ftp-http/ 【1】报错现场&#xff1b; 原因&#xff0c; 软件镜像地址有误&#xff0c;需要手工录入&#xff1b; 2、编辑文件&#xff0c; /etc/yum.repos.d/CentOS-Base.repo. 找到…

精选30道Java多线程面试题

转载自 精选30道Java多线程面试题 1、线程和进程的区别 2、实现线程有哪几种方式&#xff1f; 3、线程有哪几种状态&#xff1f;它们之间如何流转的&#xff1f; 4、线程中的start()和run()方法有什么区别&#xff1f; 5、怎么终止一个线程&#xff1f;如何优雅地终止线程&…

Vue 媒体处理(摄像头,截图,播放本地视频)

Vue 媒体处理&#xff08;摄像头&#xff0c;截图&#xff0c;播放本地视频&#xff09; 一. 打开摄像头 javascriptthis.constraint {// video属性设置video: {width: 300,height: 300,},// audio属性设置audio: true,}navigator.mediaDevices.getUserMedia(this.constrain…

how to install nc on centos8及nc应用

转自&#xff1a; https://linuxconfig.org/install-netcat-on-redhat-8 【README】 nc 是什么&#xff1f; nc&#xff0c;全名叫netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c…

大型网站架构利器-CDN技术

转载自 大型网站架构利器&#xff0d;CDN技术概念CDN这个概念相信大家都比较耳熟&#xff0c;到底什么是CDN呢&#xff1f;CDN&#xff0c;全称为Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环…

centos8启动zk集群失败:zk Error contacting service. It is probably not running.

【README】在 192.168.163.201 机器上 启动zk &#xff0c;并查看zk 这台&#xff1b; 即 集群只有2台机器&#xff0c; 201 202 --ZOO.cfg# The number of milliseconds of each tick tickTime2000 # The number of ticks that the initial # synchronization phase can tak…

动态调整canvas时的问题

动态调整canvas大小时必须重新获取上下文&#xff08; canvas.getContext(‘2d’) &#xff09;及重新设置ctx的属性&#xff0c;否则会导致后续的绘制操作无效 动态调整canvas: var canvas document.getElementsByTagName("canvas")[0];var ctx canvas.getConte…

Maven精选系列--标准目录结构

转载自 Maven精选系列--标准目录结构Maven的目录结构和传统的项目有所差别&#xff0c;下面是一个jar包通常有的目录结构。src/main/java&#xff1a;源代码目录 src/main/resources&#xff1a;资源文件目录 src/test/java&#xff1a;测试代码目录 src/test/resources&#x…

java本地连接zk集群

【README】基于centos8 搭建zookeeper 集群&#xff0c;refer2 https://blog.csdn.net/PacosonSWJTU/article/details/111409079 【1】创建maven项目 添加依赖后&#xff0c; pom.xml 长这个样子&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0&quo…

Java IO(BIO, NIO, AIO) 总结

文章转载自&#xff1a;JavaGuide 目录BIO,NIO,AIO 总结同步与异步阻塞和非阻塞1. BIO (Blocking I/O)1.1 传统 BIO1.2 伪异步 IO1.3 代码示例1.4 总结2. NIO (New I/O)2.1 NIO 简介2.2 NIO的特性/NIO与IO区别2.3 NIO 读数据和写数据方式2.4 NIO核心组件简单介绍2.5 代码示例3.…

Maven精选系列--介绍与安装

转载自 Maven精选系列--介绍与安装Maven介绍Maven是一个项目管理工具&#xff0c;用来管理项目的生命周期&#xff0c;如项目中各个项目之间的依赖管理&#xff0c;项目中使用到的jar包依赖管理&#xff0c;还有许多项目构建的插件等。使用Maven最大的好处就是不再需要我们手工…

java本地创建zk节点

【README】 java本地连接zk cluster, refer to https://blog.csdn.net/PacosonSWJTU/article/details/111404364; 【1】 创建zk节点 star &#xff08;明星节点&#xff09; /*** 测试 zk * author pacoson**/ public class TestZK {/*** zk server 连接串 */private Stri…

Java8 Lambda总结

什么是Lambda&#xff1f; Lambda是一个匿名函数&#xff0c;我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像参数一样进行传递&#xff0c;称为行为参数化)。Lambda允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;&#xff0c;要…

本地java【动态监听】zk集群节点变化

【README】搭建zk cluster&#xff0c; refer 2 https://blog.csdn.net/PacosonSWJTU/article/details/111404364 【1】 动态监听代码&#xff0c;需要写在 建立zk 连接的watcher 实现类里&#xff0c;如下&#xff1a; public class TestZK {/*** zk server 连接串 */privat…

架构师必须搞懂DNS,一篇文章就够了。

转载自 架构师必须搞懂DNS&#xff0c;一篇文章就够了。概念DNS&#xff0c;全称Domain Name System&#xff0c;即域名系统&#xff0c;搞清楚&#xff0c;它不是DNF地下城与勇士。DNS是怎么来的&#xff0c;我们知道要访问一个服务器的资源可以通过IP的形式访问&#xff0c;但…

Java 流式编程stream

目录什么是Stream&#xff1f;怎么创建Stream?Stream的中间操作Stream的终端操作什么是Stream&#xff1f; Stream它并不是一个容器&#xff0c;它只是对容器的功能进行了增强&#xff0c;添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两…

本地java判断zk节点是否存在

【README】java 本地连接zk集群&#xff0c;https://blog.csdn.net/PacosonSWJTU/article/details/111404364 【1】判断节点是否存在 /*** 测试 zk * author pacoson**/ public class TestZK {/*** zk server 连接串 */private String connectString "192.168.163.20…