ehcache缓存同步案例心得

Ehcache如何支持分布式缓存?在分布式环境下,如何保证缓存的一致性?Ehcache的缓存过期和缓存失效机制。Ehcache如何与Spring框架集成?如何配置和使用Ehcache? 上述示例中定义了一个默认的缓存,其最大内存元素数量为10000,非永久,空闲时间为120秒,生存时间为120秒,当内存满时溢出到磁盘,磁盘存储不是持久的,磁盘过期线程间隔时间为120秒,内存存储的驱逐策略为LRU(最近最少使用)。需要注意的是,Ehcache的配置和使用可能会因版本和项目需求的不同而有所差异,因此在实际使用中,你可能需要查阅相关的官方文档或参考其他资源来获取更详细和准确的信息。通过合理设置过期时间,可以确保缓存中的数据始终是最新的,并减少因数据过时而导致的错误或不一致。 阅读详情

本文分享一下ehcache的使用心得,本文主要讲以广播的形式同步缓存。

下面讲述主要分为两个部分,一个是配置文件,一个是Java代码。

1.准备jar包:

slf4j-api-1.7.12.jar,ehcache-core-2.4.3.jar,ehcache-web-2.0.4.jar
备注:1) 版本可以不同
2)sl4j可能与JavaEE6.0中的冲突,在JVM中运行时可以不使用。


2.配置文件:

2.1. 完整xml(广播形式)

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
        http://www.springmodules.org/schema/cache/springmodules-cache.xsd 
        http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    updateCheck="false">
    <!-- 默认缓存 -->
    <defaultCache eternal="false" maxElementsInMemory="10000"
        overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="0"
        memoryStoreEvictionPolicy="LFU" />
    <!-- 自定义缓存 -->
    <cache name="myCache" eternal="true" maxElementsInMemory="10000"
        overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="0"
        memoryStoreEvictionPolicy="LFU">
     <!-- 监听RMI同步缓存对象配置 注册相应的的缓存监听类,用于处理缓存事件,如put,remove,update,和expire -->
     <cacheEventListenerFactory
                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                properties="replicateAsynchronously=true, replicatePuts=true,
                            replicatePutsViaCopy=true, replicateUpdates=true,
                            replicateUpdatesViaCopy=true, replicateRemovals=true,
                            asynchronousReplicationIntervalMillis=200"/>
        <!-- 用于在初始化缓存,以及自动设置 -->
        <bootstrapCacheLoaderFactory
                class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
    </cache>
    <!--搜索某个网段上的缓存
    timeToLive
        0是限制在同一个服务器
        1是限制在同一个子网
        32是限制在同一个网站
        64是限制在同一个region
        128是限制在同一个大洲
        255是不限制-->
    <cacheManagerPeerProviderFactory  
        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"  properties="peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446,timeToLive=32,hostName=localhost" />  
    <cacheManagerPeerListenerFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"  />
</ehcache>

2.1. 关键部分
ehcache
|——defaultCache (默认cache配置)
|——cache (自定义cache)
|——|——cacheEventListenerFactory(同步动作)
|——|——bootstrapCacheLoaderFactory(工厂是指启动是指一启动就同步数据)
|——cacheManagerPeerProviderFactory(发布:广播)
|——cacheManagerPeerListenerFactory(监听)
同步缓存必须有的几个部分:

1)cacheEventListenerFactory
每个要进行同步的cache都需要设置一个用来向CacheManagerr的成员复制消息的缓存事件监听器。这个工作要通过为每个cache的配置增加一个cacheEventListenerFactory元素来完成。

 <cacheEventListenerFactory
                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
                properties="replicateAsynchronously=true, replicatePuts=true,
                            replicatePutsViaCopy=true, replicateUpdates=true,
                            replicateUpdatesViaCopy=true, replicateRemovals=true,
                            asynchronousReplicationIntervalMillis=200"/>

class – 使用net.sf.ehcache.distribution.RMICacheReplicatorFactory

这个工厂支持以下属性:
replicatePuts=true | false – 当一个新元素增加到缓存中的时候是否要复制到其他的peers. 默认是true。
replicateUpdates=true | false – 当一个已经在缓存中存在的元素被覆盖时是否要进行复制。默认是true。
replicateRemovals= true | false – 当元素移除的时候是否进行复制。默认是true。
replicateAsynchronously=true | false – 复制方式是异步的(指定为true时)还是同步的(指定为false时)。默认是true。
replicatePutsViaCopy=true | false – 当一个新增元素被拷贝到其他的cache中时是否进行复制指定为true时为复制,默认是true。
replicateUpdatesViaCopy=true | false – 当一个元素被拷贝到其他的cache中时是否进行复制(指定为true时为复制),默认是true。


2)cacheManagerPeerProviderFactory(广播方式)
自动方式:自动发现方式使用tcp广播来建立和包含一个广播组,它的特征是最小配置和对成员组的自动添加和管理。没有那个服务器是有优先级的。对等点每一秒中向广播组发送心跳,如果一个对等点在五秒钟内没发送过来,则此对等点将会被删除,如果有新的,则会被加入集群

<cacheManagerPeerProviderFactory  
        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"  
        properties="peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446,timeToLive=32,hostName=localhost" />  

peerDiscovery 方式:atutomatic 为自动 ;mulicastGroupAddress 广播组地址:230.0.0.1;mulicastGroupPort 广播组端口:40001;timeToLive是指搜索范围:0是同一台服务器,1是同一个子网,32是指同一站点,64是指同一块地域,128是同一块大陆,还有个256,我就不说了;hostName:主机名或者ip,用来接受或者发送信息的接口


3)cacheManagerPeerListenerFactory
将方式配好之后需要配置listener才会有用,接下来讲讲:Listener
Listener是用来监听从集群发送过来的信息
Listenner有两个属性:class和propertis
class 一个完整的工厂类名
properties 都好分割的对facotory有用的属性

<cacheManagerPeerListenerFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"  />

hostName指的是本机,这里注意如果使用的localhost,则只会对本机有效,请使用子网内的ip地址或者主机名,port端口 40001,socketTimeoutMillis是指socket子模块的超时时间,默认是2000ms,注意port两台主机可以相同可以不同。最好相同,个人建议.

参考文档
1.分布式缓存
2.实例项目
3.实例项目(推荐)
4.详细介绍
5.IBM版介绍

2.Java代码

客户机1

package src.text;

import java.lang.management.ManagementFactory;

import javax.management.MBeanServer;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.management.ManagementService;

public class EHCacheTest {
    private static CacheManager manager = null; // 缓存工厂

    public static void main(String[] args) {
        EHCacheTest ehCacheTest = new EHCacheTest();
        ehCacheTest.init();
    }

    protected void init() {
        // 读入配置
        String path = this.getClass().getClassLoader().getResource("").getPath() + "ehcache.xml";
        manager = CacheManager.create(path);


        // 打印初始缓存
        String[] cacheNames = manager.getCacheNames();
        printNames(cacheNames);
        // 移除缓存
        // cacheManager.removeCache("sampleDistributedCache1");
        cacheNames = manager.getCacheNames();
        printNames(cacheNames);
        // distributed -- rmi同步
        Cache cache = manager.getCache("fhxxCache");
        // 注册被管理的Bean
        // JMX -- jconsole(MBeanServer)
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        ManagementService.registerMBeans(manager, mBeanServer, true, true, true, true);
        for (int i = 0; i < 100000; i++) {
            Element temp = cache.get("ehcache");
            System.out.println("cache.getSize()=" + cache.getSize());
            cache.put(new Element(i, i));
            System.out.println("=======================");
            System.out.println("第" + i + "次cache.put");
            if (temp != null) {
                System.out.println(temp.getObjectValue());
            } else {
                System.out.println("NotFound");
            }
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    private static void printNames(String[] names) {
        System.out.println("=======================");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
    }
}

客户机2

package src.text;

import java.lang.management.ManagementFactory;

import javax.management.MBeanServer;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.Statistics;
import net.sf.ehcache.management.ManagementService;

public class EHCacheTest2 {
    private static CacheManager manager = null; // 缓存工厂

    public static void main(String[] args) {
        EHCacheTest2 ehCacheTest2 = new EHCacheTest2();
        ehCacheTest2.init();
    }

    protected void init() {
        // 读入配置
        String path = this.getClass().getClassLoader().getResource("").getPath() + "ehcache.xml";
        manager = CacheManager.create(path);

        // 打印初始缓存
        String[] cacheNames = manager.getCacheNames();
        // 注册管理Bean
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        ManagementService.registerMBeans(manager, mBeanServer, true, true, true, true);
        // distributed
        Cache cache = manager.getCache("fhxxCache");
        // 添加值后另一个虚拟机的缓存通过RMI会同步缓存,并读到这个值
        cache.put(new Element("ehcache", "newaddvalue11"));
        printCache(cache);
        for (int i = 0; i < 10000; i++) {
            try {
                cache.put(new Element("ehcache", "newaddvalue" + i));
                Thread.sleep(3000);
                System.out.println("第" + i + "次加载cache.size=" + cache.getSize());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    private static void printCache(Cache cache) {
        int size = cache.getSize();
        long memSize = cache.getMemoryStoreSize();
        long diskSize = cache.getDiskStoreSize();
        Statistics stat = cache.getStatistics();
        StringBuilder sb = new StringBuilder();
        sb.append("size=" + size + ";memsize=" + memSize);
        sb.append(";diskSize=" + diskSize + ";");
        System.out.println(sb.toString());
    }
}

运行客户机1,开始:

第0次cache.put
NotFound

客户机2,开始后,客户机1

=======================
第29次cache.put
newaddvalue3

组播的缺陷
原理:
这样当缓存改变时,ehcache会向230.0.0.1端口4446发RMI UDP组播包
这种组播方式的缺陷:
EHCACHE的组播做得比较初级,功能只是基本实现(比如简单的一个HUB,接两台单网卡的服务器,互相之间组播同步就没问题),
对一些复杂的环境(比如多台服务器,每台服务器上多地址,尤其是集群,存在一个集群地址带多个物理机,每台物理机又带多个虚拟站的子地址),就容易出现问题.
究其原因, 组播/广播转发是一个很复杂的过程. 简单的说, 一个组播缺省只能在一个网段内传输,不能跨网段.
举个简单的例子, PC机网卡的自动获取地址,还有WINDOWS里的网上邻居,都属于典型的广播服务,所以这些服务都是不能跨网段(跨路由)的,当然也不是完全不行,借助一些工具,比如CISCO路由器上的udp-broadcast helper,或者微软的netBIOS on Tcp/ip,就可以实现.
我们自己安装一些软件时,也经常遇到比如”将网卡的广播转发打开”之类的操作.

而在多网卡的主机,或同一网卡多IP的主机上,尽管地址可能是一个网段内的,但其实地址间已经存在跳数了(hop),其实就是从一个地址向另一个地址跳. 这时广播/组播就容易被阻断.
比如: 我们自己的WINDOWS上装一个VMWARE虚拟机,尽管IP地址是一个网段的,但因为虚拟机采用的桥模式不是标准的网桥模式(也可能是需要配置一下,但说实话懒得研究VMWARE了),所以广播/组播也经常出现不通的情况.
更何况在一些云计算的环境,集群的分布往往是跨网段的,甚至是跨地域的.这时更难以依赖这种初级的组播同步.
总之,分布式集群架构,建议EHCACHE改为PEER-2-PEER的同步方式.

JMS异步消息解决分布式应用的EhCache缓存同步问题 阅读详情

相关推荐

ehcache使用,以及集群配置

此为ehcache的使用以及集群的使用,具体需要两台机子,将ehcache 的hostName替换相应的ip即可

Spring配置ehcache以及事件监听

spring版本用的是4.3.16.RELEASE,pom.xml中引入相关jar: <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.2</version> </dependency&...

u013952136的博客 1173

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

Spring与Ehcache简单自定义监听器配置

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34343308的博客 225

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4657

Linux之SUSE系统SAP-HANA经常系统内存不足使得SAP应用不能使用解决方案

问题描述 Linux内存使用量超过阈值,使得sap应用程序无可用内存,最终导致程序崩溃。 问题原因 自己查阅了一些资料,也基于zabbix的可用内存和实际不太一样入手去找原因发现问题出现于Cached的值过大,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中,可以增加读写效率,该功能是Linux系统内核提供的,而SAP-HANA的日志文件很大...

liuxiangyang_的博客 6711

ehcache 缓存监听器的使用CacheEventListener

ehcache通过配置,可以实现诸如,内容最长缓存时间,内容最长没有被访问时间等功能,当以上时间expired,缓存中的内容将清空。ehcache 缓存策略:read-only:无需修改, 那么就可以对其进行只读 缓存,注意,在此策略下,如果直接修改数据库,即使能够看到前台显示效果,但是将对象修改至cache中会报error,cache不会发生作用。另:删除记录会报错,因为不能在read-only...

qsfwy的专栏 2662

喷涂机器人系列编程:ABB IRB 5500_(2).ABB IRB 5500喷涂机器人系统架构与组件

ABB IRB 5500喷涂机器人系统不仅在性能上表现出色,而且在安全和维护方面也提供了全面的解决方案。通过本文的详细介绍,希望读者能够更好地理解和掌握这一系统的架构和功能,为实际应用提供有力支持。

zhubeibei168的博客 778

EHCache分布式缓存集群环境配置

ehcache提供三种网络连接策略来实现集群,rmi,jgroup还有jms。同时ehcache可以可以实现多播的方式实现集群,也可以手动指定集群主机序列实现集群。 Ehcache支持的分布式缓存支持有三种RMI,JGroups,JMS,这里介绍下MRI和JGrpups两种方式,Ehcache使用版本为1.5.0,关于ehcache的其他信息请参考http://ehcache.source...

qq_39081511的博客 499

【第2章>第10节】深度学习DenseNet模型分析与matlab仿真

本文介绍了基于DenseNet深度学习模型的图像分类MATLAB实现方法。主要内容包括:1. DenseNet模型原理,详细解析了初始卷积层、密集块、过渡层等核心结构;2. 在MATLAB环境下完成DenseNet工具箱安装和测试样本准备;3. 实现图像预处理(统一缩放为224×224)、模型训练和测试的完整流程;4. 提供了混淆矩阵和准确率等测试结果分析。文章附带完整的MATLAB程序代码和操作视频教程,适合深度学习初学者快速掌握DenseNet模型的图像分类应用。通过实际测试,验证了该方案的有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 330

【沃顿商学院学习笔记】商业基础——Financing:05 名义利率和实际利率 APR& EAR

商业基础——名义利率和实际利率 本章主要是从名义利率和实际利率的相关概念和计算方法进行学习。 名义利率和实际利率 APR&amp;amp; EAR 根据下图可以直到: APR,QUOTED RATE在精算中又叫名义利率,比如一个房产贷款quoted rate or APR是12%,且按月复利,那么说明它的月实际利率是12%/12=1% EAR是effecive annual rate,在精算中叫实际利率,...

ECNU乐扣老师——区块链、可计算情感 1万+

ehcache缓存同步配置

ehcache结合spring aop可以很好的整合在一起,

gointoit的专栏 9208

【DexGraspNet与多指手抓取算法详解】第四章 抓取检测网络架构设计

图 $G=(V, E)$ 包含两类节点:指尖节点 $V_{tip} = \{v_{tip}^i\}_{i=1}^{N_{finger}}$ 与物体表面节点 $V_{obj} = \{v_{obj}^j\}_{j=1}^{N_{surf}}$。节点特征包含位置 $x \in \mathbb{R}^3$ 、法向 $n \in \mathbb{R}^3$ 及视觉特征 $f \in \mathbb{R}^d$。

VectorShift的博客 441

EhCache 分布式缓存对象的同步

为了提升目前开发产品的性能,项目组内考虑将一些常用的数据放入缓存,并且今后要将系统分布式部署,以达到负载均衡的目的,因此缓存同步问题就不得不需要考虑,该项目中主要用EhCache产品,EhCache的优势和劣势这里就不做介绍,网上可以搜索,单从这次项目出发,说说他在项目中的应用,Hibernate和Spring都集成了EhCache,如果您的项目中用到这两个框架,那将会大大降低开发复杂度,如果没有

袁伏彪 —— 共享,共赢 1万+

2023年GESP12月认证C++五级真题解析

例如,如果a=4,那么4是最⼩的幸运数,而1不是,但我们可以连续对1做3次+1操作,使其变为4,所以我们可以说,1幸运化后的结果是 4。【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。前一个数字,下标是j的数字是偶数,后面的数字下标是j+1的是奇数,按照要求,偶数在奇数的后面,要交换。A函数时间复杂度是O(n/2),B函数算法是O(sqrt(n)),大部分情况后者是优的,值更小。

lan_in的博客 1007

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Ehcache缓存的使用

缓存应该是每个系统都要考虑的架构,缓存不仅可以加速系统的访问速度还可以提升系统的性能。如我们需要经常访问的高频热点数据,如果把它缓存起来就能有效减少数据库服务器的压力。手机验证码等有一定的失效时间,我们就可以考虑使用缓存,等失效时间过了,就删掉验证码。

laizhenghua的博客 6445

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Ehcache利用RMI方式同步缓存

Ehcache缓存同步有几种方式:(1)RMI (2)Terrocotta (3)JMS (4)JGroups先介绍下,利用RMI进行缓存同步。 测试类1:在sampleDistributedCache2缓存中查找是否存在ehcache键,如果没找到,则打印NotFound;如果找到了,则打印相应值package my.test.ehcache1;import java.i

星星的技术专栏 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

EhCache缓存原理及配置

参考博客: EhCache 分布式缓存/缓存集群:https://www.cnblogs.com/hoojo/archive/2012/07/19/2599534.html ehcache的使用心得,本文主要讲以广播的形式同步缓存:https://www.cnblogs.com/chenergougou/p/7130436.html Ehcache配置详解及CacheManager使用:http...

menghuanzhiming的博客 8297

Ehcache 缓存框架详解

Ecache 是一个广泛使用的 Java 缓存框架,能够有效提升应用性能,并减少与后端数据库的交互次数。它采用了一系列高级缓存策略,包括内存缓存、磁盘缓存、分布式缓存等,并提供了丰富的 API 和工具类,可以方便地完成缓存的读写和管理。快速:Ecache 采用了一系列高效的缓存策略,能够实现快速的数据访问和读写,从而提高应用程序的性能。可扩展:Ecache 支持分布式缓存,可以方便地扩展到多台服务器上,从而提高系统的容错性和吞吐量。

兴趣是最好的老师,勤能补拙 6450

在Spring上集成使用ehcache缓存框架以及实现集群缓存同步

周一第一天实习,老大给了个任务给我,让我看看j2cache两级缓存框架,然后我在开源中国了解到,开源中国目前就用到这个缓存框架,主要是为了减少redis的负荷,这个两级缓存框架使用了ehcache作为一级L1缓存,使用redis作为二级L2缓存,了解到这个之后,我果断学习了一波ehcache在spring的使用。一、依赖jar包这里使用maven:<properties> <spring.v

禤永豪 2858

EhCache缓存框架

EhCache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级 容器。可以和大部分Java项目无缝整合,例如:Hibernate中的缓存就是基于EhCache实现 的。EhCache支持内存和磁盘存储,默认存储在内存中,如内存不够时把缓存数据同步到磁 盘中。EhCache支持基于Filter的Cache实现,也支持Gzip压缩算法。

asddasddeedd的博客 4216

EhCache缓存

在查询数据的时候,数据大多来自数据库,咱们会基于SQL语句的方式与数据库交互,数据库一般会基于本地磁盘IO的形式将数据读取到内存,返回给Java服务端,Java服务端再将数据响应给客户端,做数据展示。但是MySQL这种关系型数据库在查询数据时,相对比较慢,因为有磁盘IO,有时没命中索引还需要全盘扫描。在针对一些热点数据时,如果完全采用MySQL,会存在俩问题。第一个MySQL相对很脆弱,肯能会崩,第二个MySQL查询效率慢,会采用缓存。

m0_62943934的博客 1904

EhCache 缓存 EhCache 整合SpringBoot

EhCache 缓存,单机缓存,SpringBoot整合EhCache缓存,cache注解使用

weixin_47748260的博客 1990

SpringBoot EhCache 缓存

摘要: EhCache作为高效Java缓存框架,通过堆内/堆外/磁盘多级存储实现纳秒级响应,支持LRU/LFU等过期策略。Spring Boot集成仅需添加依赖、配置XML及启用注解,核心注解如@Cacheable、@CacheEvict简化缓存管理。其优势在于轻量、低延迟,但分布式支持较弱。案例演示图书查询服务,首次访问模拟3秒延迟,后续命中缓存瞬时返回。适用于高频读场景,显著提升QPS(实测120→4500+),但不适合大数据或频繁更新场景。调试时可结合JMX监控命中率,根据业务需求平衡缓存策略。

笔记 1538

Ehcache学习(四)ehcache缓存共享

缓存实现共享一般是在集群中很常用的,那么怎么配置呢?实现集群中缓存的方式有RMI,jgrop以及jms,我们把常用的第一种RMI方式进行详细的讲解以及实例的演示。   由于资源有限,我在我的机器上使用同一个ip不同的端口号来进行集群的模拟,从而达到我们想要演示的目的,实现缓存的共享。(以在windows上为例)   具体说明是:    配置cacheManagerPeerListenerFa

李晓娜 6379

ehcache 缓存丢失_分布式EHCACHE系统在缓存同步上存在着不小的缺陷

分布式EHCACHE系统,如何实现缓存数据同步?方式1: RMI组播方式这也是最常用的方式,配置简单,关键一点,各EHCACHE的节点配置都是一样的例子:spring 配置中调用的ehcache文件id="cacheManager"class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">name="configL...

weixin_31081671的博客 600
上一篇: myeclipse一直停留在Loading workbench界面上的处理办法
下一篇: IDEA 使用入门
晓明兄
博客等级 码龄12年 69粉丝 35原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值