Java实现一定时间内同时请求接口时返回相同数据

news/2025/11/13 10:27:50/文章来源:https://www.cnblogs.com/beijie/p/19216841

1. 缓存机制

使用本地缓存(如Caffeine)

@Service
public class DataService {private final Cache<String, Object> cache = Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS)  // 30秒过期.maximumSize(1000).build();public Object getData(String key) {return cache.get(key, k -> fetchDataFromSource(k));}private Object fetchDataFromSource(String key) {// 实际的数据获取逻辑return new Object();}
}

使用Redis缓存

@Service
public class DataService {@Autowiredprivate StringRedisTemplate redisTemplate;public Object getData(String key) {String cachedData = redisTemplate.opsForValue().get(key);if (cachedData != null) {return JSON.parseObject(cachedData, Object.class);}// 获取新数据Object data = fetchDataFromSource(key);redisTemplate.opsForValue().set(key, JSON.toJSONString(data), 30, TimeUnit.SECONDS);return data;}
}

2. 请求合并机制

使用ConcurrentHashMap实现请求合并

@Service
public class MergingDataService {private final ConcurrentHashMap<String, CompletableFuture<Object>> pendingRequests = new ConcurrentHashMap<>();public CompletableFuture<Object> getDataAsync(String key) {// 检查是否有正在进行的相同请求CompletableFuture<Object> existingFuture = pendingRequests.get(key);if (existingFuture != null) {return existingFuture;}// 创建新的请求CompletableFuture<Object> newFuture = new CompletableFuture<>();CompletableFuture<Object> previousFuture = pendingRequests.putIfAbsent(key, newFuture);if (previousFuture != null) {// 其他线程已经创建了请求return previousFuture;}// 执行实际的数据获取try {Object data = fetchDataFromSource(key);newFuture.complete(data);return newFuture;} finally {pendingRequests.remove(key);}}private Object fetchDataFromSource(String key) {// 实际的数据获取逻辑return new Object();}
}

3. 控制器层实现

@RestController
public class DataController {@Autowiredprivate DataService dataService;@Autowiredprivate MergingDataService mergingDataService;@GetMapping("/data")public ResponseEntity<Object> getData(@RequestParam String key) {try {Object data = dataService.getData(key);return ResponseEntity.ok(data);} catch (Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}}@GetMapping("/data/async")public CompletableFuture<ResponseEntity<Object>> getDataAsync(@RequestParam String key) {return mergingDataService.getDataAsync(key).thenApply(data -> ResponseEntity.ok(data)).exceptionally(throwable -> ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build());}
}

4. 使用Spring Cache注解

@Service
@EnableCaching
public class CachedDataService {@Cacheable(value = "dataCache", key = "#key", unless = "#result == null")@Cacheable(cacheNames = "dataCache", key = "#key")public Object getData(String key) {// 模拟耗时操作try {Thread.sleep(1000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}return fetchDataFromSource(key);}private Object fetchDataFromSource(String key) {return new Object();}
}

推荐方案

  1. 简单场景:使用本地缓存或Redis缓存
  2. 高并发场景:使用请求合并机制避免重复计算
  3. 复杂业务:结合多种方案,先检查缓存,再进行请求合并

这样可以有效减少重复请求对后端服务的压力,并保证在缓存有效期内返回相同的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/964087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协议和socket的关系

目录协议和socket的关系定义核心比喻:协议与Socket的关系就像“语言”与“电话”总结与关系Socket的位置 协议和socket的关系 定义协议:是一套明确的规则和标准,规定了网络中的设备如何交换信息。HTTP、WebSocket、…

2025年评价高的上海智算中心IDCE数据中心展同期活动

2025年评价高的上海智算中心IDCE数据中心展同期活动:行业趋势与优质企业推荐行业背景与市场趋势随着全球数字化转型加速推进,数据中心作为数字经济的核心基础设施正迎来前所未有的发展机遇。根据IDC最新报告,2025年…

sqlserver日志收缩

适用场景:随着业务数据库使用时间的增长,数据库完整备份任务的持续运行,ldf日志文件会越来越大,里面存有大量事务,占用大量空间的同时也让数据库变得臃肿。此时我们需要定期做数据库日志的收缩。 以数据库名为rep…

2025年玻璃鼠标垫定制厂家推荐排行榜

2025年玻璃鼠标垫定制厂家推荐排行榜随着电竞产业的蓬勃发展和办公需求的不断提升,玻璃鼠标垫凭借其出色的顺滑度、耐用性和个性化设计,越来越受到用户的青睐。在众多玻璃鼠标垫定制厂家中,哪些值得推荐呢?以下是2…

2025年可靠的环保咨询全国优质服务推荐榜

2025年可靠的环保咨询全国优质服务推荐榜行业背景与市场趋势随着中国"双碳"目标的持续推进和环保法规的日益严格,环保咨询行业迎来了前所未有的发展机遇。据生态环境部最新数据显示,2024年我国环保产业规模…

2025年国内有名的品牌设计行业影响力品牌榜

2025年国内有名的品牌设计行业影响力品牌榜行业背景与市场趋势随着中国经济的持续发展和消费升级趋势的深化,品牌设计行业迎来了前所未有的发展机遇。据中国品牌研究院最新数据显示,2024年中国品牌设计市场规模已达到…

2025酒店防风卷帘供应厂家推荐榜单

2025酒店防风卷帘供应厂家推荐榜单山东亿斯特新材料有限公司 - 行业领军品牌作为中国遮阳行业的领军企业,山东亿斯特新材料有限公司在酒店防风卷帘领域表现卓越,值得重点推荐。公司实力 国家级高新技术企业 现代化智…

2025年质量好的澳洲海外仓中转一件代发优质服务榜

2025年质量好的澳洲海外仓中转一件代发优质服务榜行业背景与市场趋势随着全球跨境电商的持续繁荣,澳洲市场已成为中国卖家的重要战略布局地。根据澳洲统计局最新数据,2024年澳洲跨境电商市场规模达到创纪录的82亿澳元…

2025年靠谱的格力空调代理值得信赖机构榜单

2025年靠谱的格力空调代理值得信赖机构榜单:专业数据与采购指南行业背景与市场趋势中国空调行业近年来保持稳健增长,据《2024-2029年中国空调行业市场调研与发展前景预测报告》显示,2023年国内空调市场规模突破2500…

kubelet在和kube-apiserver通信不支持http2协议cup占用升高

kubelet在和kube-apiserver通信的时候,会优先尝试使用http2协议,如果http2协议不支持,会回退到http1.1协议。http2的连接复用模式是多路复用,并行传输;http1.1的连接复用模式是串行请求,队头阻塞; 可以简单理解…

2025年Sandra律师离婚团队口碑排行榜单

2025年Sandra律师离婚团队口碑排行榜单尊而光律师事务所Sandra律师团队荣誉登顶综合评分:★★★★★ 5.0分团队核心优势专业实力领跑行业 首席律师Sandra:尊而光律师事务所联合创始人,涉外家事业务部首席律师 执业经…

达梦数据库 查询建表语句、获取字段注释(亲测可用)

达梦数据库 查询建表语句、获取字段注释(亲测可用)-- 查询建表语句(大写) SELECT dbms_metadata.get_ddl(TABLE, XX) AS DDL_STATEMENT FROM dual;-- 获取字段注释(大写) SELECT COMMENT ON COLUMN || TABLE_NA…

五分钟构建智能知识库:AI如何重塑知识管理

五分钟构建智能知识库:AI如何重塑知识管理在信息爆炸的时代,我们常常面临这样的困境:公司的重要文档散落在各个角落,员工花费大量时间寻找资料,客户问题需要辗转多个部门才能得到解答。这些问题不仅影响工作效率,…

2025年比较好的标书制作品牌推荐榜

2025年比较好的标书制作品牌推荐榜 行业背景与市场趋势 随着招投标行业的规范化发展,标书制作的专业性、合规性要求越来越高。根据《2024年中国招投标行业分析报告》,全国招投标市场规模已突破10万亿元,其中标书制…

2025年比较好的酒会活动策划行业影响力品牌榜

2025年酒会活动策划行业影响力品牌榜:专业解析与权威推荐行业背景与市场趋势随着中国经济的持续发展和消费升级趋势的深化,酒会活动策划行业在2025年迎来了前所未有的发展机遇。根据中国商务活动协会最新发布的《202…

2025折叠伸缩雨棚定制厂家推荐排行

2025折叠伸缩雨棚定制厂家推荐排行行业领军品牌:山东亿斯特新材料有限公司作为中国遮阳行业的领军企业,山东亿斯特新材料有限公司凭借其卓越的产品质量和创新的技术实力,在2025年折叠伸缩雨棚定制领域占据绝对领先地…

2025年知名的智慧工厂目视化规划最新品牌推荐榜服务商

2025年知名的智慧工厂目视化规划最新品牌推荐榜服务商智慧工厂目视化规划的行业背景与市场趋势随着工业4.0时代的深入发展,智慧工厂建设已成为全球制造业转型升级的核心方向。据国际数据公司(IDC)最新报告显示,2025年…

基于MATLAB实现空间计量模型及检验方法

基于MATLAB实现空间计量模型(SVAR、SEM、SMD等)及检验方法(LM、Wald等)一、核心模型MATLAB实现 1. 空间杜宾模型(SDM) %% 数据准备 load(spatial_panel.mat); % 包含y, x, W矩阵 n = size(y,1); T = size(y,2);%…

2025农用遮阳网销售厂家排行

2025农用遮阳网销售厂家排行:四川诚瑞信商贸有限公司领跑行业随着现代农业技术的不断发展,农用遮阳网在农业生产中扮演着越来越重要的角色。作为专业的遮阳网生产厂家,四川诚瑞信商贸有限公司凭借其卓越的产品质量和…

2025年评价高的赣州装修公司定制

2025年评价高的赣州装修公司定制指南赣州装修行业背景与市场趋势随着赣州城市化进程加速和居民生活水平提升,装修行业近年来呈现蓬勃发展态势。据江西省住建厅2024年数据显示,赣州市装修市场规模已达87.5亿元,年增长…