type
status
date
slug
summary
tags
category
titleIcon
password
icon
calloutIcon
2️⃣
技术重点在三个方面:幂等性保障|延迟任务|合并写,除去这一部分,其他主要为基本业务,简单且量大,对初学友好,如果不是第一次做微服务项目,选看这三个方面就可以跳了。文中图片与代码块较多,善用展开懒加载。 接口幂等性(数据库唯一约束);分库分表的主键id(雪花/Redis);高并发写优化(MQ改异步写/Redis合并写请求);RabbitMQ;SpringTask单机定时任务;@PostConstruct生命周期Hook;Spring Data Redis逆天API;定时任务持久化播放记录;区分Spring与Swagger的@RequestBody注解;Interface常量类;Delayed单机延迟任务;Caffeine本地缓存;自动装配

接口设计通用思路

根据产品原型确定:
  • 请求方式(如果公司没有要求POSTful,而是RESTful实践)
  • 请求路径
  • 请求参数(分页的Query,传参的DTO)
  • 请求返回(VO)

接口幂等性保障

数据库唯一约束

  • 数据库添加唯一约束,多次调用会触发数据库异常。
notion image

Redis保存唯一标识

  • 保存当前订单id于Redis中,保存一段时间(如60s),业务先判断当前订单id是否在Redis中,如果有数据就不再调用业务。

业务表主键id选取

  • 雪花id/Redis生成(考虑分库分表)
  • 自增id(不考虑分库分表)

高并发优化思路

提高单机并发

  • 通过减小业务接口响应时间,提升单机性能与并发。

缩短业务响应时间

读优化
  • 优化代码,SQL
  • Redis缓存数据
写优化
  • 优化代码,SQL
  • 同步写改异步写(MQ实现),仅发送MQ通知,不等待业务执行。
    • 优点
    • 不需要等待业务执行,可以显著减少响应时间。
    • 利用MQ暂存消息,流量削峰。
    • 降低数据库写频率,减轻数据库压力。
    • 缺点
    • 依赖MQ可靠性。
    • 不减少写次数。
    • 场景
    • 业务复杂,链路较长,多次写操作的业务。
  • 合并写请求,先将每次数据更新到Redis,定期将缓存数据批量写入数据库。
    • 优点
    • 写入Redis显著快于MySQL,可以减少响应时间。
    • 降低数据库写频率与减少写次数,减轻数据库压力。
    • 缺点
    • 不支持事务。
    • 复杂业务实现复杂。
    • 依赖Redis可靠性。
    • 场景
    • 写频率高,写业务简单的场景。

水平扩展

  • 对热点服务进行水平扩展,负载均衡,提高整个集群并发能力。

服务保护

  • 通过服务熔断与降级保护提高服务高可用性。

延时任务(写合并)

业务场景

  • 订单超时自动取消
  • 下单成功短信通知

实现方式

  • Java API,DelayQueue(√)|ScheduledExecutorService (单机)
  • Redisson,Redis数据结构模拟DelayQueue
  • MQ延迟消息 (分布式)
  • 分布式调度XXL-JOB (分布式)
  • Netty时间轮

项目使用

业务情景

  • 合并写,合并多次播放记录写,仅写入用户最后一次提交的播放记录。
  • 延迟任务,更新Redis后(前端15s提交一次更新请求)提交延迟任务,在20s后获得的延迟任务里查询Redis检查本次与上回数据是否一致,一致则为最后一次,写回数据库。
notion image

业务实现

展开
notion image
notion image
notion image
notion image
notion image

ES与MySQL同步方式

  • MQ方式,实时性好,不能批量。
  • Canal伪装MySQL从库,数据同步。
  • (LogStash)定时任务同步,不即时,可批量更新。
  • RPC方式,响应时间长。

Day02课表练习参考实现

删除课表中课程

展开

退款消息处理

notion image

用户删除课程

notion image

检查课程是否有效

展开
notion image

查询用户课表中指定课程状态

展开
notion image

统计课程的学习人数

展开
notion image

Day03练习参考实现

课程过期SpringTask定时任务

展开
notion image

Day04练习参考实现

延迟任务线程池改造

展开
notion image
notion image

定时任务持久化播放记录

展开
notion image
notion image
notion image
notion image
notion image
notion image

Day05练习参考实现

修改问题

展开
notion image

删除问题

展开
notion image

管理端隐藏或显示问题

展开
notion image

管理端根据id查询问题详情

展开
notion image
notion image
notion image

新增回答或评论

展开
notion image

分页查询回答或评论列表|管理端分页查询回答或评论列表

展开
notion image
notion image
notion image

管理端显示或隐藏评论

展开
notion image

其他注意事项

区分Spring与Swagger的@RequestBody注解

notion image

代码参考模板

RabbitMQ消费者模板
notion image
Interface常量类模板
notion image
SpringTask定时任务模版
启动类
notion image
定时任务类
notion image
DelayQueue单机延迟任务模板
DelayTask任务定义
notion image
notion image
notion image
notion image
notion image
Caffeine模板|自动装配
notion image
notion image
notion image
notion image
自动装配模板
notion image
notion image
Openfeign模板|自动装配
notion image

了解更多

 
记一次debug天机学堂Day06-Day08复盘-点赞|积分|排行榜业务
Loading...
CamelliaV
CamelliaV
Java;CV;ACGN
最新发布
单例模式的四种写法
2025-4-24
体验MCP
2025-4-24
MetingJS使用自定义音乐源-CF+Huggingface部署
2025-4-2
博客访问站点测速分析与对比
2025-3-26
前端模块化
2025-3-16
Voxel2Mesh相关论文精读与代码复现
2025-3-15
公告
计划:
  • LLM相关
  • 支付业务 & 双token无感刷新
  • (线程池计算优惠方案)天机学堂Day09-Day12复盘-优惠劵业务
  • (业务复盘,技术汇总)天机学堂完结复盘
  • hot 100
 
2024-2025CamelliaV.

CamelliaV | Java;CV;ACGN