通过本文章,可以完成多级缓存架构中的进程缓存。
一、引入依赖
在item-service
中引入caffeine
依赖
language-xml
1 2 3 4
| <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency>
|
二、实现进程缓存
这是Caffeine官方文档地址
1. 配置Config类
创建config.CaffeineConfig
类
language-java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Configuration public class CaffeineConfig { @Bean public Cache<Long, Item> itemCache(){ return Caffeine.newBuilder() .initialCapacity(100) .maximumSize(10_000) .build(); }
@Bean public Cache<Long, ItemStock> stockCache(){ return Caffeine.newBuilder() .initialCapacity(100) .maximumSize(10_000) .build(); } }
|
2. 修改controller
在ItemController
中注入两个Cache
对象,并修改业务逻辑
language-java
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 28 29 30 31 32 33 34 35 36 37
| @RestController @RequestMapping("item") public class ItemController {
@Autowired private IItemService itemService; @Autowired private IItemStockService stockService; @Autowired private Cache<Long, Item> itemCache; @Autowired private Cache<Long, ItemStock> stockCache;
@GetMapping("/{id}") public Item findById(@PathVariable("id") Long id){ return itemCache.get(id, key-> itemService.query() .ne("status", 3).eq("id", id) .one() ); // return itemService.query() // .ne("status", 3).eq("id", id) // .one(); }
@GetMapping("/stock/{id}") public ItemStock findStockById(@PathVariable("id") Long id){ return stockCache.get(id, key-> stockService.getById(id) ); // return stockService.getById(id); } }
|
三、运行
Idea结合Docker将springboot放入docker容器中运行,并指定使用multi-cache_multi-cache
网络,以及固定172.30.3.4
地址。
详细参考如下文章
启动好后,可以看到springboot
容器和mysql容器处于同一网络下。(Docker Desktop for Windows插件PortNavigator)
四、测试
访问http://localhost:8081/item/10001
可以看到springboot
日志输出如下
language-txt
1 2 3
| 02:45:58:841 DEBUG 1 --- [nio-8081-exec-1] c.h.item.mapper.ItemMapper.selectOne : ==> Preparing: SELECT id,name,title,price,image,category,brand,spec,status,create_time,update_time FROM tb_item WHERE (status <> ? AND id = ?) 02:45:58:889 DEBUG 1 --- [nio-8081-exec-1] c.h.item.mapper.ItemMapper.selectOne : ==> Parameters: 3(Integer), 10001(Long) 02:45:58:951 DEBUG 1 --- [nio-8081-exec-1] c.h.item.mapper.ItemMapper.selectOne : <== Total: 1
|
当我们二次访问此网址,强制刷新+禁用浏览器缓存+更换浏览器,springboot
日志都没有新的查询记录,说明使用了Caffeine
缓存。
未找到相关的 Issues 进行评论
请联系 @Xiamu-ssr 初始化创建