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-design

J2Cache 的数据读取流程

j2cache-read-flow

J2Cache 的数据更新流程

j2cache-update-flow

J2Cache 对第三方组件的支持

  • 支持使用 Ehcache、Ehcache3、Caffeine 作为一级缓存
  • 支持使用 Redis、Memcached 作为二级缓存
  • 支持使用 Fst、Kyro、FastJson、Java 原生的序列化机制
  • 支持使用 JGroups、Redis、RabbitMQ、RocketMQ 来同步不同机器节点的一级缓存数据
  • 支持使用 Jedis、Lettuce 作为 Redis 的客户端
  • 支持作为 Hibernate3、Hibernate4、Hibernate5、MyBatis 的二级缓存实现