微服务实战系列之EhCache

前言

书接前文,继续深耕。上一篇博主对Redis进行了入门级介绍,大体知道了Redis可以干什么以及怎么使用它。

今日博主继续带着大家学习如何使用EhCache,这是一款基于Java的缓存框架。



一、Ehcache简介

Ehcache is an open-source, standards-based cache for boosting performance, offloading your database, and simplifying scalability, it is today's most widely used Java-based cache.
Ehcache provides in-process cache, which you can replicate across multiple nodes.

博主提炼几个关键词:开源、标准化、轻量级、Java缓存、分布式

1. 快速入门

Ehcache支持API、XML的的集成方式,博主以XML为例进行介绍。

1.1 导入依赖
xml 复制代码
<!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache -->
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.10.9.2</version>
</dependency>

因为只依赖 slf4j-api,所以Ehcache真正的做到了轻量级。

1.2 配置参数

准备一个echache.xml文件,参考配置:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
   <!--  指定磁盘存储目录-->
   <diskStore path="d:/ehcache/mycache/" />
   <!-- 
        defaultCache:默认的缓存
        maxElementsInMemory:内存中最大缓存对象数
        eternal:是否永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性
        overflowToDisk:Element数量达到maxElementsInMemory时,写到磁盘中
   -->
   <defaultCache
      maxElementsInMemory="100"
      eternal="true"
      overflowToDisk="true"/>
 <!-- 
        maxElementsInMemory:设置成1且overflowToDisk为true,代表只要有一个Element,就立即持久化到硬盘
        eternal:设置成true,永久有效
        maxElementsOnDisk:硬盘中最大缓存对象数,不限为0
        diskPersistent:是否缓存虚拟机重启期数据 
     -->
    <cache 
      name="firstCache"
      maxElementsInMemory="1" 
      eternal="true"
      overflowToDisk="true" 
      maxElementsOnDisk="0"
      diskPersistent="true"/>
 
</ehcache>
2. 数据管理机制

Ehcache数据缓存依赖Manager完成,遵循CacheManager--->Cache--->Element层级关系,以下是每个组件的特点。

  • CacheManager
    缓存管理器,是Ehcache的入口。
  • Cache
    每个CacheManager可以管理多个Cache,每个Cache可以管理多个Element。
  • Element
    单条缓存的组成单位。
3. 缓存策略
  • FIFO:先进先出
  • LRU:最近最少使用
  • LFU:最不经常使用

二、单体OR集群

1. 单体

单体模式,数据缓存在本地磁盘或内存中,适用于对数据缓存要求较高的场景。因此需要准备足够的磁盘或内存空间。

2. 集群

集群模式,Ehcache提供了多种部署方案,比如基于RMI、JMS等组内广播策略,实现分布式缓存部署。

鉴于Ehcache不保证数据安全(即数据访问正确性),所以其特点之一可能是"快而不准",如此可能会带来一个问题:"缓存一致性"。因此,通常需结合其他保障一致性的组件配合使用,实现二级缓存,如下图:


结语

Ehcache作为近年来比较流行的Java缓存框架,对于本地缓存的支持已足够。"小而快"的特点,也让它成为微服务中的热门组件。当然也存在粗暴的一面,也因此失去了分布式的部分优势。

所以各位盆友,不同的缓存各领风骚,选择需谨慎!

相关推荐
null不是我干的3 分钟前
基于黑马教程——微服务架构解析(一)
java·微服务·架构
你听得到113 分钟前
Flutter - 手搓一个日历组件,集成单日选择、日期范围选择、国际化、农历和节气显示
前端·flutter·架构
java叶新东老师26 分钟前
三、搭建springCloudAlibaba2021.1版本分布式微服务-springcloud loadbalancer负载均衡
分布式·spring cloud·微服务
zxsz_com_cn2 小时前
智能化设备健康管理:中讯烛龙预测性维护系统引领行业变革
大数据·架构
GEM的左耳返3 小时前
Java面试全方位解析:从基础到AI的技术交锋
spring boot·微服务·java面试·互联网大厂·rag技术·ai面试·java技术栈
ζั͡山 ั͡有扶苏 ั͡✾3 小时前
RocketMQ 5.3.0 ARM64 架构安装部署指南
架构·rocketmq·国产系统·arm64
Serendipity2613 小时前
微服务架构
前端·微服务
shinelord明4 小时前
【计算机网络架构】网状型架构简介
大数据·分布式·计算机网络·架构·计算机科学与技术
GEM的左耳返4 小时前
Java面试实战:从基础到架构的全方位技术交锋
spring boot·微服务·云原生·java面试·技术解析·ai集成
tangzzzfan5 小时前
深入 Moya:从架构设计到现代 iOS App 网络层最佳实践
架构