项目优化要点

一、防止重复请求

1.前端预防措施

(1)防抖机制

①适用场景:按钮快速点击(如提交订单、保存操作)。

②实现方式:通过JavaScript防抖函数限制请求频率,例如用户连续点击时仅发送最后一次请求。

(2)按钮禁用状态

①适用场景:表单提交、文件导出防止重复操作。

②实现方式:提交请求后立即禁用按钮,响应返回后重新启用。

2.后端预防措施

(1)Token令牌机制

①适用场景:关键操作(如订单提交、库存修改)。

②实现方式:

1)生成唯一Token并存储在Redis,设置过期时间(如5分钟)。

2)前端提交时携带Token,后端验证后立即删除Token。

3)若Token不存在或已过期,拒绝请求。

(2)AOP + 自定义注解

①适用场景:需要全局防重的接口(如库存扣减、支付回调)。

②实现方式:

1)定义注解@NoRepeatSubmit,标记需要防重的接口。

2)通过AOP拦截请求,生成唯一Key(如用户ID + 接口路径),存储在ConcurrentHashMap或Redis中。

3)若Key存在,拒绝请求;否则执行逻辑并存储Key。

(3)数据库唯一索引

①适用场景:关键数据表(如订单表、库存变更记录)。

②实现方式:

1)在数据库表中对关键字段(如订单号)添加唯一索引,防止重复插入。

二、防止数据内存溢出

1.代码层优化

(1)避免静态集合无限制存储

①问题场景:使用静态Map缓存数据(如static Map<String, Object> cache)。

②解决方案:改用Redis缓存框架。

(2)及时关闭资源

①问题场景:未关闭数据库连接、文件流等。

②解决方案:使用try-with-resources或手动关闭资源

2.JVM参数调优

(1)增加堆内存

①适用场景:处理大量数据时(如批量导入库存)。

②配置方式:在启动参数中设置-Xms512m -Xmx2048m(初始堆512MB,最大堆2GB)。

(2)监控内存使用

①工具推荐:使用VisualVM或JConsole监控堆内存、GC频率等指标。

②关键指标:

1)老年代使用率:持续接近100%可能内存不足。

2)Full GC频率:频繁触发(每秒多次)需优化。

3.缓存策略优化

(1)设置缓存过期时间

①适用场景:Redis缓存热数据(如商品库存)。

②配置方式:通过redisTemplate.expire("key", 10, TimeUnit.MINUTES)设置过期时间。

(2)限制缓存大小

①适用场景:本地缓存(如Caffeine)。

②配置方式:通过maximumSize(1000)限制缓存条目数。

4.分页查询与流式处理

(1)分页查询

①适用场景:大数据量查询(如销售记录列表)。

②实现方式:使用MyBatis的RowBounds或Spring Data JPA的Pageable。

(2)流式处理

①适用场景:导出大量数据(如Excel导出)。 、

②实现方式:使用Apache POI的SXSSFWorkbook或分块读取数据库。

相关推荐
SimonKing14 分钟前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
装不满的克莱因瓶17 分钟前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
杨凯凡21 分钟前
Spring Boot 文件上传怎么做才安全?流式落盘、路径校验与数据库一致性实战
java·spring boot·文件上传·后端安全·数据库一致性
这个昵称不容易1 小时前
旅游管理系统的设计与实现(SpringBoot + MySQL + Vue 前后端分离)
java·springboot·毕设
Rain的Java大神之路1 小时前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
天天被压力2 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
天天被压力2 小时前
【A股分钟级高频数据完全手册 #12】股票五档盘口数据接口:买卖五档实时盘口解析
java·人工智能·python
Wang's Blog11 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain12 小时前
C++转Java日记(03)
java·开发语言·c++
皮皮林55112 小时前
Java实现微信扫码登录
java