Java中的JetCache 实战

网友投稿 514 2022-08-03


Java中的JetCache 实战

目录1.JetCache 是什么?2.使用方法

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.使用方法

添加依赖

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

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,EnableCreateCacheAlpOlckiAnnotation这两个注解分别激活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);

}

}

业务类上增加注解使用,业务类代码如下:

public interface OrderService {

OrderVo get(Long id);

OrderVo createOrder(OrderDto orderDto);

}

// 实现类

@Service

publlpOlckiAic 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;

}

}

测试代码

@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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:elasticsearch索引index之engine读写控制结构实现(elasticsearch创建索引命令)
下一篇:Java实现图片比率缩放(java实现图片压缩)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~