JetCache快速入门指南:阿里巴巴高性能Java缓存框架

JetCache快速入门指南:阿里巴巴高性能Java缓存框架

【免费下载链接】jetcache JetCache is a Java cache framework. 【免费下载链接】jetcache 项目地址: https://gitcode.com/gh_mirrors/je/jetcache

什么是JetCache

JetCache是阿里巴巴开源的一个Java缓存框架,它提供了统一的API和注解来简化缓存的使用。JetCache支持多种缓存类型,包括本地缓存、远程缓存以及多级缓存组合,能够显著提升应用性能。

核心特性

  1. 注解驱动的缓存操作
  2. 支持本地缓存和远程缓存
  3. 多级缓存支持
  4. 自动刷新和缓存失效机制
  5. 丰富的监控统计功能

快速开始

1. 创建缓存实例

在JetCache中,可以通过@CreateCache注解创建缓存实例。以下是一个典型示例:

@Autowired
private CacheManager cacheManager;

private Cache<Long, UserDO> userCache;

@PostConstruct
public void init() {
    QuickConfig qc = QuickConfig.newBuilder("userCache") // 缓存名称,用于统计信息
        .expire(Duration.ofSeconds(100)) // 设置缓存过期时间
        //.cacheType(CacheType.BOTH) // 可选:创建两级缓存
        //.localLimit(100) // 可选:本地缓存元素个数限制
        //.syncLocal(true) // 可选:在多级缓存情况下同步更新其他JVM实例
        .build();
    userCache = cacheManager.getOrCreateCache(qc);
}

创建后的缓存使用方式类似于Map:

// 获取缓存
UserDO user = userCache.get(123L);
// 存入缓存
userCache.put(123L, user);
// 移除缓存
userCache.remove(123L);

2. 方法缓存

JetCache支持通过@Cached注解为方法添加缓存功能,这是通过Spring AOP实现的:

public interface UserService {
    @Cached(name="UserService.getUserById", expire = 3600)
    User getUserById(long userId);
}

注意:

  • 注解可以加在接口方法或类方法上
  • 被注解的方法必须属于Spring管理的Bean

配置指南

Spring Boot配置

对于Spring Boot项目,推荐使用starter方式集成:

  1. 添加依赖:
<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-starter-redis</artifactId>
    <version>${jetcache.latest.version}</version>
</dependency>
  1. 配置application.yml:
jetcache:
  statIntervalMinutes: 15  # 统计信息输出间隔
  areaInCacheName: false   # 是否在缓存名称中包含区域信息
  local:
    default:
      type: linkedhashmap  # 本地缓存类型
      keyConvertor: fastjson  # 键转换器
  remote:
    default:
      type: redis          # 远程缓存类型
      keyConvertor: fastjson2  # 键转换器
      broadcastChannel: projectA  # 广播通道名称
      valueEncoder: java   # 值编码器
      valueDecoder: java   # 值解码器
      poolConfig:
        minIdle: 5         # 连接池最小空闲连接数
        maxIdle: 20        # 连接池最大空闲连接数
        maxTotal: 50       # 连接池最大连接数
      host: 127.0.0.1      # Redis主机地址
      port: 6379           # Redis端口
  1. 创建启动类:
@SpringBootApplication
@EnableMethodCache(basePackages = "com.company.mypackage")
@EnableCreateCacheAnnotation
public class MySpringBootApp {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApp.class);
    }
}

非Spring Boot配置

对于非Spring Boot项目,可以通过Java配置类方式集成:

  1. 添加依赖:
<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-anno</artifactId>
    <version>${jetcache.latest.version}</version>
</dependency>
<dependency>
    <groupId>com.alicp.jetcache</groupId>
    <artifactId>jetcache-redis</artifactId>
    <version>${jetcache.latest.version}</version>
</dependency>
  1. 创建配置类:
@Configuration
@EnableMethodCache(basePackages = "com.company.mypackage")
@EnableCreateCacheAnnotation
@Import(JetCacheBaseBeans.class)
public class JetCacheConfig {

    @Bean
    public Pool<Jedis> pool(){
        GenericObjectPoolConfig pc = new GenericObjectPoolConfig();
        pc.setMinIdle(2);
        pc.setMaxIdle(10);
        pc.setMaxTotal(10);
        return new JedisPool(pc, "localhost", 6379);
    }

    @Bean
    public GlobalCacheConfig config(Pool<Jedis> pool){
        Map localBuilders = new HashMap();
        EmbeddedCacheBuilder localBuilder = LinkedHashMapCacheBuilder
                .createLinkedHashMapCacheBuilder()
                .keyConvertor(FastjsonKeyConvertor.INSTANCE);
        localBuilders.put(CacheConsts.DEFAULT_AREA, localBuilder);

        Map remoteBuilders = new HashMap();
        RedisCacheBuilder remoteCacheBuilder = RedisCacheBuilder.createRedisCacheBuilder()
                .keyConvertor(Fastjson2KeyConvertor.INSTANCE)
                .valueEncoder(JavaValueEncoder.INSTANCE)
                .valueDecoder(JavaValueDecoder.INSTANCE)
                .broadcastChannel("projectA")
                .jedisPool(pool);
        remoteBuilders.put(CacheConsts.DEFAULT_AREA, remoteCacheBuilder);

        GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig();
        globalCacheConfig.setLocalCacheBuilders(localBuilders);
        globalCacheConfig.setRemoteCacheBuilders(remoteBuilders);
        globalCacheConfig.setStatIntervalMinutes(15);
        globalCacheConfig.setAreaInCacheName(false);

        return globalCacheConfig;
    }
}

最佳实践

  1. 缓存命名规范:为缓存和方法缓存使用有意义的名称,便于监控和排查问题
  2. 合理设置过期时间:根据业务特点设置不同的过期时间
  3. 多级缓存:对于热点数据,考虑使用LOCAL+BOTH类型的多级缓存
  4. 监控统计:利用内置的统计功能定期分析缓存命中率

常见问题

  1. 缓存穿透:对于不存在的key,可以考虑使用空对象缓存
  2. 缓存雪崩:为不同的key设置随机的过期时间
  3. 缓存一致性:在多级缓存情况下,确保syncLocal配置正确

JetCache通过简洁的API和强大的功能,为Java应用提供了高效的缓存解决方案。无论是简单的本地缓存还是复杂的分布式缓存场景,JetCache都能提供良好的支持。

【免费下载链接】jetcache JetCache is a Java cache framework. 【免费下载链接】jetcache 项目地址: https://gitcode.com/gh_mirrors/je/jetcache

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值