alibaba jetcache介绍

alibaba jetcache介绍

Scroll Down

是由

在现在一般项目中或多或少的使用了一些缓存,如果本地缓存如SpringCache,远程缓存如redis Cache,如果您使用到了redis缓存,那么jetcache是一个不错的选择,他支持本地缓存,本地二级缓存,Redis缓存等,同时是支持spring-boot-starter方式做到开箱即用,

jetCache 介绍

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。

全部特性:

  • 通过统一的API访问Cache系统
  • 通过注解实现声明式的方法缓存,支持TTL和两级缓存
  • 通过注解创建并配置Cache实例
  • 针对所有Cache实例和方法缓存的自动统计
  • Key的生成策略和Value的序列化策略是可以配置的
  • 分布式缓存自动刷新,分布式锁 (2.2+)
  • 异步Cache API (2.2+,使用Redis的lettuce客户端时)
  • Spring Boot支持

如何使用jetcache

示例:采用spring-boot工程,jetcache github

  1. 引用jar
 <dependency>
      <groupId>com.alicp.jetcache</groupId>
      <artifactId>jetcache-starter-redis-lettuce</artifactId>
      <version>${jetCache.version}</version>
 </dependency>

2.配置properties文件

示例不展示配置的properties,yml,直接请看jetCache-github

  1. spring boot Application 注解

@EnableCreateCacheAnnotation 该注解就是spring boot启动类,表明启动jetcache

  1. 通过 @CreateCache 来创建jetcache
 @CreateCache(cacheType = CacheType.REMOTE, area = RedisConstants.REDIS_JETCACHE_AREA, name = RedisConstants.REDIS_JETCACHE_NAME_USER)
    private Cache<Object, Object> cache;

这样我们就可以直接使用cache来进行操作

CacheManager 管理jetCache实例

  /**
     * <p>
     * 获取当前{@link CacheManager}
     * </p>
     *
     * @return {@link CacheManager}
     */
    private static CacheManager getCacheManger() {
        CacheManager cacheManager = CacheManager.defaultManager();
        return cacheManager;
    }


    /**
     * <p>
     * 获取指定的cache
     * </p>
     *
     * @param area      指定要使用的那个area的name
     * @param cacheName 指定缓存的名称
     * @return {@link Cache}
     */
    private static Cache getCache(String area, String cacheName) {
        Assert.notNull(area, "area is null");
        Assert.notNull(cacheName, " cacheName is null");
        CacheManager cacheManger = getCacheManger();
        return cacheManger.getCache(area, cacheName);
    }

注意这里的CacheManager导入的是com.alicp.jetcache.anno.support下的
这样我们就可以进行操作

注意

  1. 使用CacheManager时可能获取为null,由于是懒式加载,所以在使用时必须首先实例化当前Cache也就是@CreateCache被使用

  2. CacheManger为什么不能创建Cache,这个问题我也询问了作者issues399,issues374,但是他的优势大于这个弊端,极大的改善了每次去配置自定义redisTemplate