业务缓存

matevip 2021-6-6 大约 2 分钟

# 一、JetCache缓存

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

支持二级缓存,本项目使用了redis + caffeine

# 二、JetCache特性

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

# 三、工具类封装

# 3.1 引入依赖

<dependency>
    <groupId>vip.mate</groupId>
    <artifactId>mate-starter-jetcache</artifactId>
</dependency>
1
2
3
4

# 3.2 yaml配置

jetcache:
  statIntervalMinutes: 1 #统计间隔分钟
  areaInCacheName: false
  local:
    default: #默认area
      type: caffeine
      keyConvertor: fastjson
  remote:
    default:
      type: redis.springdata # type由 redis.lettuce 变为了redis.springdata
      keyConvertor: fastjson
1
2
3
4
5
6
7
8
9
10
11

# 四、使用方法

# 4.1 注解方式实现方式级缓存

JetCache方法缓存和SpringCache比较类似,它原生提供了TTL支持,以保证最终一致,并且支持二级缓存。JetCache2.4以后支持基于注解的缓存更新和删除。

在spring环境下,使用@Cached注解可以为一个方法添加缓存,@CacheUpdate用于更新缓存,@CacheInvalidate用于移除缓存元素。注解可以加在接口上也可以加在类上,加注解的类必须是一个spring bean,例如:

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

    @CacheUpdate(name="userCache.", key="#user.userId", value="#user")
    void updateUser(User user);

    @CacheInvalidate(name="userCache.", key="#userId")
    void deleteUser(long userId);
}
1
2
3
4
5
6
7
8
9
10

key使用Spring的SpEL脚本来指定。如果要使用参数名(比如这里的key="#userId"),项目编译设置target必须为1.8格式,并且指定javac的-parameters参数,否则就要使用key="args[0]"这样按下标访问的形式。

@CacheUpdate和@CacheInvalidate的name和area属性必须和@Cached相同,name属性还会用做cache的key前缀。

@Cached注解和@CreateCache的属性非常类似,但是多几个

详见:https://github.com/alibaba/jetcache/wiki/MethodCache_CN (opens new window)

上次编辑于: 2021年6月8日 16:31
贡献者: matevip