0
点赞
收藏
分享

微信扫一扫

JetCache 快速实战


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支持

如何使用

  1. 添加依赖
// redis
   implementation 'org.springframework.boot:spring-boot-starter-data-redis'
   implementation 'org.apache.commons:commons-pool2'

   // jetcache
   implementation 'com.alicp.jetcache:jetcache-starter-redis:2.6.2'
  1. 配置 yml
jetcache:
statIntervalMinutes: 15
areaInCacheName: false
local:
  default:
    type: linkedhashmap
    keyConvertor: fastjson
remote:
  default:
    type: redis
    keyConvertor: fastjson
    valueEncoder: java
    valueDecoder: java
    poolConfig:
      minIdle: 5
      maxIdle: 20
      maxTotal: 50
    host: 127.0.0.1
    port: 6379
  1. 然后创建一个App类放在业务包的根下,EnableMethodCache,EnableCreateCacheAnnotation这两个注解分别激活Cached和CreateCache注解,其他和标准的Spring Boot程序是一样的。这个类可以直接main方法运行。
package io.zhengsh.order;

import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
import com.alicp.jetcache.anno.config.EnableMethodCache;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("io.zhengsh.order.mapper")
@SpringBootApplication
@EnableMethodCache(basePackages = "io.zhengsh.order.service")
@EnableCreateCacheAnnotation
public class OrderApplication {

   public static void main(String[] args) {
       SpringApplication.run(OrderApplication.class);
  }
}
  1. 业务类上增加注解使用,业务类代码如下:
public interface OrderService {

   OrderVo get(Long id);

   OrderVo createOrder(OrderDto orderDto);
}

// 实现类
@Service
public class OrderServiceImpl implements OrderService {

   private Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);

   @Override
   public OrderVo get(Long id) {
       logger.info("OrderService#get invoke!");
       Order orderVo =  new OrderVo();
       orderVo.setCode("100");
       return orderVo;
  }

   @Override
   public OrderVo createOrder(OrderDto orderDto) {
       logger.info("OrderService#createOrder invoke!");
       return null;
  }
}
  1. 测试代码
@SpringBootTest
class OrderServiceTest {

   private Logger logger = LoggerFactory.getLogger(OrderServiceTest.class);

   @Autowired
   private OrderService orderService;

   @Test
   void get() {
       OrderVo orderVo = orderService.get(100L);
       logger.info("orderVo#code : {} ", orderVo.getCode());

       OrderVo orderVo1 = orderService.get(100L);
       logger.info("orderVo#code : {} ", orderVo1.getCode());
  }

   @Test
   void createOrder() {
  }
}

输出如下:


// 输出
// OrderService#get invoke!
// orderVo#code : 100
// orderVo#code : 100

常见问题

常见问题我们可以参考官方的 issues:

  • ​​github.com/alibaba/jet…​​
举报

相关推荐

0 条评论