通用缓存访问框架JetCache

JetCache是由阿里巴巴开源的通用缓存访问框架,提供的核心能力包括:

  1. 提供统一的,类似jsr-107风格的API访问Cache,并可通过注解创建并配置Cache实例
  2. 通过注解实现声明式的方法缓存,支持TTL和两级缓存
  3. 分布式缓存自动刷新,分布式锁 (2.2+)
  4. 支持异步Cache API
  5. Spring Boot支持
  6. Key的生成策略和Value的序列化策略是可以定制的
  7. 针对所有Cache实例和方法缓存的自动统计

JetCache使用

添加maven依赖

        <dependency>
            <groupId>com.alicp.jetcache</groupId>
            <artifactId>jetcache-starter-redis</artifactId>
            <version>2.6.1</version>
        </dependency>  

  

@SpringBootApplication
@EnableMethodCache(basePackages = "com.mengka.springboot.service")
@EnableCreateCacheAnnotation
public class Demo2Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class, args);
    }
}

  

public interface UserService {
    //配置一级缓存
    @Cached(name="userCache-", key="#userId", expire = 60)
    //缓存30秒钟自动刷新,从getUserById方法取一次,如果key在600秒内没有访问则不再自动刷新
    @CacheRefresh(refresh = 30, stopRefreshAfterLastAccess = 600, timeUnit = TimeUnit.SECONDS)
    //当缓存访问未命中的情况下,对并发进行的加载行为进行保护,同一个JVM中同一个key只有一个线程去加载,其它线程等待结果
    @CachePenetrationProtect
    User loadUser(long userId);

    //更新缓存
    @CacheUpdate(name="userCache-", key="#user.id", value="#user")
    User updateUser(User user);

    //删除缓存
    @CacheInvalidate(name="userCache-", key="#userId")
    void deleteUser(long userId);
}

  

自动刷新

@CacheRefresh

 

加载保护,对于加载开销比较大的对象,为了防止缓存未命中时的高并发访问打爆数据库

 CachePenetrationProtect注解保证当缓存未命中的时候,一个JVM里面只有一个线程去执行方法,其它线程等待结果。

@CachePenetrationProtect

 

接口测试

    @GetMapping("world")
    public ResponseEntity<String> world() {
        log.info("-------, 调用hello接口");

        User user1 = userService.loadUser(1001);

        User updateUser = new User();
        updateUser.setName("mp444xxx");
        updateUser.setId(1001L);
        userService.updateUser(updateUser);

        User user2 = userService.loadUser(1001);

        userService.deleteUser(1001L);

        User user3 = userService.loadUser(1001);

        return ResponseEntity.ok("Hello World");
    }

  

 

参考文档

【1】https://github.com/alibaba/jetcache/blob/master/introduce_CN.md

【2】https://blog.csdn.net/zhuyu19911016520/article/details/106951358

posted on 2021-12-13 13:35  rabbit-xf  阅读(619)  评论(0)    收藏  举报