J2Cache 两级缓存框架介绍
大纲
相关资源
缓存介绍
主流缓存框架
Ehcache、Caffeine 、Spring Cache、Guava Cache、JetCache、Hazelcast、Infinispan
主流缓存解决方案
- 内存缓存(如 Ehcache、Caffeine) — 速度快,进程内可用
- 集中式缓存(如 Redis、Memcached)— 可同时为多节点提供服务
常见的缓存清除策略
- Ehcache 自动清除
- 程序清除
- 手工清除
Ehcache 介绍
Ehcache 的优缺点
优点:
- 读写内存,速度快
- 两级缓存(内存 + 磁盘)
- 多区域 (Region) 的缓存数据结构
- 暴露了缓存数据监听接口
- 支持多种集群部署方式 (JGroups、RMI、Ehcache Server)
缺点:
- 高峰期重启导致的缓存雪崩
- 单节点对突发的攻击应付不足
- 多节点运行时缓存数据不同步
J2Cache 介绍
J2Cache 真正解决的问题
- 使用内存缓存时,一旦应用重启后,由于缓存数据丢失,引发缓存雪崩,给数据库造成巨大压力,导致应用堵塞
- 使用内存缓存时,多个应用节点无法共享缓存数据
- 使用集中式缓存,由于大量的数据通过缓存获取,导致缓存服务的数据吞吐量太大,带宽跑满。现象就是 Redis 服务负载不高,但是由于机器网卡带宽跑满,导致数据读取非常慢
特别注意
J2Cache 不适合对数据一致性要求很高的业务场景。
J2Cache 的设计思路
在 J2Cache 的最新版本中,默认支持使用 JGroups、Redis、RabbitMQ、RocketMQ 来同步不同机器节点的一级缓存数据。
J2Cache 的数据读取流程
J2Cache 的数据更新流程
J2Cache 对第三方组件的支持
- 支持使用 Ehcache、Ehcache3、Caffeine 作为一级缓存
- 支持使用 Redis、Memcached 作为二级缓存
- 支持使用 Fst、Kyro、FastJson、Java 原生的序列化机制
- 支持使用 JGroups、Redis、RabbitMQ、RocketMQ 来同步不同机器节点的一级缓存数据
- 支持使用 Jedis、Lettuce 作为 Redis 的客户端
- 支持作为 Hibernate3、Hibernate4、Hibernate5、MyBatis 的二级缓存实现