当前位置: 首页 > news >正文

多级缓存架构(二)Caffeine进程缓存

文章目录

  • 一、引入依赖
  • 二、实现进程缓存
      • 1. 配置Config类
      • 2. 修改controller
  • 三、运行
  • 四、测试

通过本文章,可以完成多级缓存架构中的进程缓存。
在这里插入图片描述
在这里插入图片描述

一、引入依赖

item-service中引入caffeine依赖

		<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId></dependency>

二、实现进程缓存

这是Caffeine官方文档地址

1. 配置Config类

创建config.CaffeineConfig

@Configuration
public class CaffeineConfig {@Beanpublic Cache<Long, Item> itemCache(){return Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).build();}@Beanpublic Cache<Long, ItemStock> stockCache(){return Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).build();}
}

2. 修改controller

ItemController中注入两个Cache对象,并修改业务逻辑

@RestController
@RequestMapping("item")
public class ItemController {@Autowiredprivate IItemService itemService;@Autowiredprivate IItemStockService stockService;@Autowiredprivate Cache<Long, Item> itemCache;@Autowiredprivate 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地址。
详细参考如下文章

  • Idea连接Docker在本地(Windows)开发SpringBoot
    在这里插入图片描述

启动好后,可以看到springboot容器和mysql容器处于同一网络下。(Docker Desktop for Windows插件PortNavigator)
在这里插入图片描述

四、测试

访问http://localhost:8081/item/10001可以看到springboot日志输出如下

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缓存。

相关文章:

  • javascript的三元运算
  • 【办公类-19-01】20240108图书统计登记表制作(23个班级)EXCEL复制表格并合并表格
  • openssl3.2 - 官方demo学习 - mac - gmac.c
  • Visual Studio Code 1.67调整文件嵌套、Markdown导航
  • yolov7_Obb环境安装
  • YOLOv8改进 | 检测头篇 | 利用DBB重参数化模块魔改检测头实现暴力涨点 (支持检测、分割、关键点检测)
  • 红黑树(RBTree)
  • 如何在 Ubuntu 中更改时区设置
  • 谷歌地图多个maker标记点击显示当前信息弹窗infowindow
  • ardupilot开发 --- 固件定制(OEM) 篇
  • 任务12:使用Hadoop Streaming解压NCDC天气原始数据
  • Resize:最近邻插值、双线性插值、双三次插值
  • 1.环境部署
  • export 是一个在 Unix 和类 Unix 系统(比如 Linux 和 macOS)中常用的 shell 命令,主要用于设置或导出环境变量。
  • C++——STL标准模板库——容器详解——set
  • $translatePartialLoader加载失败及解决方式
  • [译]Python中的类属性与实例属性的区别
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【个人向】《HTTP图解》阅后小结
  • 2017届校招提前批面试回顾
  • AHK 中 = 和 == 等比较运算符的用法
  • canvas 五子棋游戏
  • chrome扩展demo1-小时钟
  • Docker容器管理
  • eclipse(luna)创建web工程
  • Java方法详解
  • js ES6 求数组的交集,并集,还有差集
  • Python 反序列化安全问题(二)
  • python 装饰器(一)
  • scala基础语法(二)
  • Spring-boot 启动时碰到的错误
  • SwizzleMethod 黑魔法
  • ViewService——一种保证客户端与服务端同步的方法
  • Web设计流程优化:网页效果图设计新思路
  • 初识 beanstalkd
  • 漂亮刷新控件-iOS
  • UI设计初学者应该如何入门?
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $.ajax()方法详解
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (MATLAB)第五章-矩阵运算
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法设计与分析)第一章算法概述-习题
  • (转)ABI是什么
  • ./和../以及/和~之间的区别
  • .naturalWidth 和naturalHeight属性,
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化