Java里面二级缓存框架J2Cache

J2Cache 是一个由 OSChina 开发的两级缓存框架,旨在解决高并发场景下的缓存性能问题。它通过整合本地缓存(L1)和分布式缓存(L2),有效降低对分布式缓存的访问压力,同时保证缓存数据的一致性和高可用性。以下是关于 J2Cache 的详细介绍和使用示例:


1. J2Cache 的核心特性

  • 两级缓存结构
    • L1(一级缓存):进程内缓存,支持 Caffeine、Ehcache 2.x 和 Ehcache 3.x。
    • L2(二级缓存):集中式缓存,支持 Redis 和 Memcached。
  • 数据读取顺序:L1 → L2 → DB,优先从本地缓存读取数据,减少对分布式缓存的访问。
  • 缓存一致性:通过 Redis Pub/Sub 或 JGroups 实现缓存更新通知,确保多节点缓存数据的一致性。
  • 高可用性:支持动态调整缓存策略,适应不同业务场景。
  • 低延迟:通过本地缓存减少网络开销,提升数据读取速度。

2. J2Cache 的使用场景

  • 高并发场景:如电商、社交平台等需要频繁读取缓存的业务。
  • 集群环境:多节点共享缓存数据,避免缓存雪崩。
  • 单机环境:通过本地缓存避免应用重启导致的缓存冷启动问题。

3. J2Cache 的配置与使用

3.1 依赖引入

在 Maven 项目中引入 J2Cache 的依赖:

<dependency>
  <groupId>net.oschina.j2cache</groupId>
  <artifactId>j2cache-spring-boot2-starter</artifactId>
  <version>2.8.0-release</version>
</dependency>
<dependency>
  <groupId>net.oschina.j2cache</groupId>
  <artifactId>j2cache-core</artifactId>
  <version>2.8.0-release</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>
3.2 配置文件

application.yml 中配置 J2Cache:

j2cache:
  # 一级缓存配置
  L1:
    provider_class: caffeine
  # 二级缓存配置
  L2:
    provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider
    config_section: lettuce
  # Redis 配置
  redis-client: lettuce
  l2-cache-open: true
  broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy
  sync_ttl_to_redis: true
  default_cache_null_object: false
  serialization: fst

spring:
  redis:
    host: 127.0.0.1
    password: 123456
    port: 6379
    database: 0
3.3 代码示例

以下是一个简单的 Spring Boot 控制器示例,展示如何使用 J2Cache:

@RestController
@RequestMapping("/cache")
public class MyController {
    @Autowired
    private CacheChannel cacheChannel;

    @GetMapping("/get")
    public List<String> getData() {
        CacheObject cacheObject = cacheChannel.get("region", "key");
        if (cacheObject.getValue() == null) {
            // 从数据库获取数据
            List<String> data = Arrays.asList("data1", "data2");
            cacheChannel.set("region", "key", data);
            return data;
        }
        return (List<String>) cacheObject.getValue();
    }

    @GetMapping("/evict")
    public String evictCache() {
        cacheChannel.evict("region", "key");
        return "Cache evicted";
    }
}

4. J2Cache 的优势

  • 降低 Redis 压力:通过本地缓存减少对 Redis 的访问,避免带宽瓶颈。
  • 灵活配置:支持多种缓存实现和消息通知机制。
  • 高一致性:通过 Redis Pub/Sub 或 JGroups 实现缓存同步。
  • 易于集成:提供 Spring Boot Starter,简化配置和使用。

5. 常见问题与解决方案

  • 缓存雪崩:通过本地缓存和分布式缓存结合,避免缓存集中失效。
  • 缓存穿透:设置默认值或布隆过滤器,防止无效请求穿透到数据库。
  • 缓存一致性:使用 Redis Pub/Sub 或 JGroups 实现缓存更新通知。

6. 参考资源


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

研创通之逍遥峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值