使用Caffeine实现帖子的缓存来优化网站的运行速度
导入依赖
<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version></dependency>
在Service层中调用Caffeine的接口
@Service
public class DiscussPostService {private final static Logger logger = LoggerFactory.getLogger(DiscussPostService.class);@Autowiredprivate DiscussPostMapper discussPostMapper;@Value("${caffeine.posts.max-size}")private int maxSize;@Value("${caffeine.posts.expire-seconds}")private int expireSeconds;// Caffeine's core API: Cache, LoadingCache, AsyncLoadingCache// posts list cacheprivate LoadingCache<String, List<DiscussPost>> postListCache;// posts total number cacheprivate LoadingCache<Integer, Integer> postRowsCache;@PostConstructpublic void init(){// initialize the post list cachepostListCache = Caffeine.newBuilder().maximumSize(maxSize).expireAfterWrite(expireSeconds, TimeUnit.SECONDS).build(new CacheLoader<String, List<DiscussPost>>() {@Overridepublic @Nullable List<DiscussPost> load(String key) throws Exception {if(key == null || key.length() == 0){throw new IllegalArgumentException("parameter error: key must not be null");}String[] params = key.split(":");if(params == null || params.length != 2) {throw new IllegalArgumentException("parameter error");}int offset = Integer.valueOf(params[0]);int limit = Integer.valueOf(params[1]);// in there, we can add second level cache, such as Redis// if we can't find data in the Redis, then query it in MySQLlogger.debug("load post list from DB...");return discussPostMapper.selectDiscussPosts(0, offset, limit, 1);}});// initialize the post total number cachepostRowsCache = Caffeine.newBuilder().maximumSize(maxSize).expireAfterWrite(expireSeconds, TimeUnit.SECONDS).build(new CacheLoader<Integer, Integer>() {@Overridepublic @Nullable Integer load(Integer key) throws Exception {logger.debug("load post list from DB...");return discussPostMapper.selectDiscussPostRows(key);}});}public List<DiscussPost> findDiscussPosts(int userId, int offset, int limit, int orderMode) {if(userId == 0 && orderMode == 1){return postListCache.get(offset + ":" + limit);}logger.debug("load post list from DB...");return discussPostMapper.selectDiscussPosts(userId, offset, limit, orderMode);}public int findDiscussPostRows(int userId) {if (userId == 0) {return postRowsCache.get(userId);}logger.debug("load post rows from DB...");return discussPostMapper.selectDiscussPostRows(userId);}
}
测试
@SpringBootTest
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyCommunityApplication.class)
public class CaffeineTest {@Autowiredprivate DiscussPostService postService;@Testpublic void testCache(){System.out.println(postService.findDiscussPosts(0, 0, 10, 1));System.out.println(postService.findDiscussPosts(0, 0, 10, 1));System.out.println(postService.findDiscussPosts(0, 0, 10, 1));System.out.println(postService.findDiscussPosts(0, 0, 10, 0));}
}
结果:

可以看到,第一次记录还未加入缓存,所以是从DB中加载,而后两次访问记录都是从Caffeine中加载的;最后一次访问是强制要求从DB中访问的。
通过压力测试检测使用缓存提高的效率
相关文章:
使用Caffeine实现帖子的缓存来优化网站的运行速度
导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…...
Webpack5 搭建Vue项目(进阶版)
Webpack5 搭建Vue项目(进阶版) 提示:中间隔了好长时间,我胡汉三又回来继续更新了!!!😂😂😂 文章目录 Webpack5 搭建Vue项目(进阶版)前…...
论文阅读:Distortion-Free Wide-Angle Portraits on Camera Phones
论文阅读:Distortion-Free Wide-Angle Portraits on Camera Phones 今天介绍一篇谷歌 2019 年的论文,是关于广角畸变校正的。 Abstract 广角摄影,可以带来不一样的摄影体验,因为广角的 FOV 更大,所以能将更多的内容…...
力扣每日一题---207. 课程表
Problem: 207. 课程表 文章目录 解题方法复杂度Code 解题方法 y总的 Topsort 模板题 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( n ) O(n) O(n) Code class Solution {int res 0; public…...
在Kubernetes环境中有关Nginx Ingress与API Gateway的连接问题
文章目录 小结问题解决参考 小结 在Kubernetes环境中是通过Nginx Ingress来从外部访问Kubernetes内部的环境,并用API Gateway来分发请求,碰到了 502 Bad gateway.的问题,并尝试解决。 问题 从外部通过Nginx Ingress访问Kubernetes内部的环…...
c语言练习44:深入理解strstr
深入理解strstr strstr作用展示: #include <stdio.h> #include <string.h> int main() {char str[] "This is a simple string";char* pch;pch strstr(str, "simple");/*strncpy(pch, "sample", 6);*/printf("%s…...
渗透测试漏洞原理之---【业务安全】
文章目录 1、业务安全概述1.1业务安全现状1.1.1、业务逻辑漏洞1.1.2、黑客攻击目标 2、业务安全测试2.1、业务安全测试流程2.1.1、测试准备2.1.2、业务调研2.1.3、业务建模2.1.4、业务流程梳理2.1.5、业务风险点识别2.1.6 开展测试2.1.7 撰写报告 3、业务安全经典场景3.1、业务…...
CentOS查看CPU、内存、网络流量和磁盘 I/O
安装 yum install -y sysstat sar -d 1 1 rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s rsec/s:…...
无人机航线规划
无人机航线规划,对于无人机的任务执行有着至关重要的作用,无人机在从起点飞向目的点的过程中,如何规划出一条安全路径,并且保证该路径代价最优,是无人机航线规划的主要目的。其中路径最优的含义是,在无人机…...
react中受控组件与非受控组件
受控组件与非受控组件 受控组件: 其值由 React 控制的组件,通常使用 state 来控制和修改组件的值。 例如受控的 组件: class NameForm extends React.Component {constructor(props) {super(props);this.state {value: };}handleChange (event) > {this.setState({val…...
【网络教程】如何解决Docker删除镜像和容器后磁盘空间未释放的问题
文章目录 问题分析解决方案删除未使用的容器删除未使用的镜像删除未使用的数据卷调整Docker数据存储路径问题分析 当删除Docker镜像和容器后,磁盘空间并未释放,这可能导致磁盘空间不足。造成此问题的原因包括: Docker镜像和容器的删除策略:默认情况下,Docker不会立即删除…...
Python中的进度条显示方案
迷途小书童 读完需要 3分钟 速读仅需 1 分钟 大家好,我是迷途小书童! tqdm 是一个非常常用的 Python 进度条库,它可以在循环迭代和 IO 操作期间添加一个进度条,直观地显示循环迭代的进程。 tqdm 是在 2013 年发布的,目的是为 Pyth…...
2023-09-05力扣每日一题
链接: 2605. 从两个数字数组里生成最小数字 题意: 两个数组都只包含1-9的数字,求一个最小数,两个数组内都要有它的其中一位 解: 要么是个位数要么是十位数,存一下数量和两边的最小数即可 实际代码&am…...
ODC现已开源:与开发者共创企业级的数据库协同开发工具
OceanBase 开发者中心(OceanBase Developer Center,以下简称 ODC)是一款开源的数据库开发和数据库管理协同工具,从首个版本上线距今已经发展了三年有余,ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…...
生成克隆钓鱼网站与对win7进行后渗透操作
目录 目录 前言 系列文章列表 思维导图 1,实验涉及复现环境 2,CS的介绍 2.1,CS的简介 2.2,CS的主要功能 3,CS的安装 3.1,将cobalt_strike_4.5文件夹放到kali中 3.1,放入过程中的注意事项 3.2,如图所示 4,配置工具 4.1,进入c…...
Ubuntu18中NVIDIA,cuda,cudnn,pytorch安装
注意:nvidia驱动和cuda,cudnn,pytroch,python的对应关系 linux安装pytorch(包括cuda与cudnn)_linux清华园按照pytorch1.12_BryceRui的博客-CSDN博客 安装流程:安装cuda(包括nvidia驱动) cudnn python安装…...
MATLAB中M文件编写
简介 所谓M文件就是将处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。然后,由MATLAB系统编译M文件,得出相应的运行结果。M文件具有相当大的可开发性和扩展性。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数,…...
企业数字化神经网络
随着数字化时代的到来,数据已经成为企业战略性资源和重要的生产要素。企业数字化转型的核心是充分开发和利用数据资源,以数据为驱动,对业务流程进行重构与创新,从而提升企业的核心竞争力。业务系统是企业数据资源的源头࿰…...
C++this指针
本文旨在讲解C中this关键字,以及其相关作用! 定义 this 是 C 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。 this的介绍 下面来看一下关于this这个关键字的实例࿰…...
【初阶C语言】操作符1--对二进制的操作
前言:本节内容介绍的操作符,操作的对象是二进制位。所以前面先介绍整数的二进制位 一、二进制位介绍 1.二进制介绍 (1)整数的二进制表示形式有三种:原码、反码和补码。 (2)原码、反码和补码的…...
LyricsX:重构Mac音乐体验的智能歌词助手
LyricsX:重构Mac音乐体验的智能歌词助手 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 当你在Mac上沉浸于音乐世界时,是否曾因无法同步显示歌词而…...
MXNet多语言生态:Python到Java/C++的跨平台部署
MXNet多语言生态:Python到Java/C的跨平台部署 文章详细介绍了MXNet深度学习框架的多语言支持能力,重点阐述了从Python训练环境到Java/C生产环境的完整部署流程。内容涵盖Python API的深度使用指南,包括NDArray高效张量计算、Symbolic编程的计…...
Java: 手动实现DeepSeek R1工具调用,基于ReAct与Spring AI的实践指南
1. DeepSeek R1工具调用的现状与挑战 DeepSeek R1作为当前热门的开源大模型,在实际应用中经常会遇到需要调用外部工具的场景。但很多开发者在使用过程中发现,当前版本的DeepSeek R1并不支持原生的工具调用功能。这意味着当我们想让模型执行诸如查询天气、…...
自动驾驶避障实战:人工势场法的核心原理与MATLAB仿真
1. 人工势场法基础概念 第一次接触人工势场法是在研究生阶段的机器人学课程上,当时教授用了一个非常形象的比喻:想象你手里拿着一块磁铁,目标点是一块异性磁极的磁铁,障碍物则是同性磁极的磁铁。这个简单的物理现象,就…...
【ERPNext部署】:企业用户的开源ERP系统快速搭建方案
【ERPNext部署】:企业用户的开源ERP系统快速搭建方案 【免费下载链接】erpnext_quick_install Unattended install script for ERPNext Versions, 13, 14 and 15 项目地址: https://gitcode.com/gh_mirrors/er/erpnext_quick_install 在数字化转型浪潮中&…...
零基础学习数据库:用快马AI生成你的第一个可操作图书管理系统
作为一个刚接触数据库的小白,最近在InsCode(快马)平台上尝试做了一个图书管理系统项目,整个过程意外地顺利。这里记录下我的学习心得,希望能帮到同样零基础的朋友们。 为什么选择图书管理系统作为入门项目 图书管理系统包含了数据库最基础的…...
中国 AI 大模型应用市场趋势分析报告
中国 AI 大模型应用市场趋势分析报告 报告类型:新兴趋势识别 蓝海机会评估 覆盖市场:中国大陆 数据时效:截至 2026 年 3 月 研究方法:多源数据交叉验证(艾媒咨询、中商情报、36氪研究院、虎嗅、中国工业互联网研究院等…...
Llama-3.2V-11B-cot保姆级教程:Streamlit界面按钮/状态/动效设计逻辑
Llama-3.2V-11B-cot保姆级教程:Streamlit界面按钮/状态/动效设计逻辑 1. 工具概览与核心价值 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具,专为双卡4090环境优化。这个工具最大的特点是让复杂的多模态模型变得简单易用…...
NaViL-9B开源镜像免配置教程:无需下载权重,5分钟跑通图文问答
NaViL-9B开源镜像免配置教程:无需下载权重,5分钟跑通图文问答 1. 快速了解NaViL-9B NaViL-9B是由专业研究机构开发的原生多模态大语言模型,它不仅能像普通AI那样进行文字对话,还能看懂图片内容。想象一下,你上传一张…...
Win11 24H2新技巧:无需微软账户快速完成OOBE本地账户配置
1. Win11 24H2本地账户配置的现状与痛点 每次拿到新电脑或者重装系统时,最烦人的就是那个漫长的初始化设置过程。特别是Windows 11强制要求登录微软账户的设定,让很多注重隐私或者网络条件不好的用户头疼不已。我最近帮朋友配置了几台预装Win11 24H2的新…...
