首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大厂都在用的本地缓存Ehcache原来这么强!

大厂都在用的本地缓存Ehcache原来这么强!

作者头像
JavaEdge
发布2021-02-23 15:49:26
发布2021-02-23 15:49:26
99700
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

最为广泛使用的纯Java开发的轻量级本地缓存框架。

Ehcache架构图

核心组件

  • cache manager 缓存管理器,可多实例
  • cache 缓存管理器内可放置若干个cache,所有cache都实现了Ehcache接口,是实际使用的缓存实例,真正地存放数据。通过缓存管理器模式,即可实现在单应用中隔离多个缓存实例,各自独立服务不同业务场景,缓存数据物理隔离,同时需要时又可组合共享。
  • element 单条缓存数据的组成单位。
  • system of record(SOR) 实际缓存数据都是通过SOR读写的,可以是真正的业务逻辑、外部接口调用、存放真实数据的DB。

它的缓存介质涵盖堆内存(heap)、堆外内存(BigMemory商用版本支持)和磁盘,各介质可独立设置属性和策略。 Ehcache最初是独立的本地缓存框架,随着发展,结合Terracotta服务阵列模型,可支持分布式缓存集群,主要有RMI、JGroups、JMS和Cache Server等传播方式进行节点间通信,如架构图左侧部分。

数据流转

  • Flush 缓存条目向低层次移动
  • Fault 从低层拷贝一个对象到高层。在获取缓存的过程中,某层发现自己的该缓存数据已失效,就触发Fault。
  • Eviction 把缓存项除去
  • Expiration 失效状态
  • Pinning 强制缓存项保持在某层

数据流转生命周期

L1:本地内存层,L2:Terracotta服务节点层

配置

代码语言:javascript
代码运行次数:0
运行
复制

虽然Ehcache支持磁盘持久化,但由于存在两级缓存介质。 在一级内存中的缓存,如果没有主动刷入磁盘,应用异常时依然会出现缓存数据丢失。 可按需将缓存刷到磁盘,将缓存刷到磁盘的操作cache.flush()。 对象的磁盘写入,前提是要将对象序列化。

特性

  • 快 Ehcache的多线程机制专门优化高并发场景
  • 简单 小小的jar包,简单配置开箱即用,单机场景更无需依赖其它组件
  • 多种缓存策略
  • 两级缓存(内存&磁盘) 相比一般本地缓存,有了磁盘,将可缓存更多数据
  • 监控 具有缓存和缓存管理器的监听接口,能更简单方便的进行缓存实例的监控管理
  • 支持多缓存管理器实例,以及一个实例的多个缓存区域
  • 超时 Ehcache的超时设置是针对整个cache实例的策略,而没有提供方便的细粒度单独key的超时处理。过期失效的缓存数据无法被GC回收,时间越长缓存越多,内存占用越大,内存泄露概率越大
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心组件
  • 数据流转
  • 配置
  • 特性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档