好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java中的JetCache 实战

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

2.使用方法

添加依赖

?

1

2

3

4

5

6

    // 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'

配置 yml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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

然后创建一个App类放在业务包的根下, EnableMethodCache , EnableCreateCacheAnnotation 这两个注解分别激活Cached和CreateCache注解,其他和标准的Spring Boot程序是一样的。这个类可以直接main方法运行。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@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

到此这篇关于Java中的JetCache 实战的文章就介绍到这了,更多相关Java中的JetCache内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://juejin.cn/post/7082396439292149773

查看更多关于Java中的JetCache 实战的详细内容...

  阅读:17次