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

mall-项目redis三剑客

一、分布式锁

文件 说明
mall-common/.../lock/RedisDistributedLock.java 核心锁工具,SET NX PX 加锁 + Lua 脚本原子解锁
mall-common/.../lock/DistributedLock.java @DistributedLock 注解
mall-common/.../lock/DistributedLockAspect.java AOP 切面,支持 SPEL 动态 key
mall-common/.../lock/LockConfig.java 配置类,注入 StringRedisTemplate

使用示例 — 在秒杀/下单方法上加注解:
@DistributedLock(key = "'stock:lock:' + #skuId", waitMs = 3000)
public void deductStock(Long skuId, Integer quantity) {
// 业务逻辑
}
或编程式调用:
redisDistributedLock.executeWithinLock("stock:lock:" + skuId, 5000, () -> {
// 临界区代码
return null;
});

二、限流

文件 说明
mall-common/.../ratelimit/RateLimit.java @RateLimit 注解
mall-common/.../ratelimit/RateLimitAspect.java AOP 切面,Redis Lua 脚本(INCR + PEXPIRE 原子执行)

使用示例 — 在 Controller 方法上加注解:
@RateLimit(key = "'rate:login:' + #username", count = 5, time = 1, timeUnit = RateLimit.TimeUnit.MINUTES)
@PostMapping("/sso/login")
public CommonResult login(String username, String password) {
// 每分钟同一用户名最多登录5次
}

三、ZSet 延时队列(订单超时取消)

文件 说明
mall-portal/.../component/RedisOrderDelayQueue.java ZSet 延迟队列,CommandLineRunner 启动后每1秒轮询
mall-portal/.../component/SpringContextHolder.java Spring 上下文持有器,供非 Bean 类获取 Bean
RedisService.java + RedisServiceImpl.java 已新增 zAdd / zRemove / zRangeByScore / zScore 四个方法
使用方式 — 在 generateOrder() 之后,用 ZSet 替代 RabbitMQ 延迟消息:
// 替换原有的 sendDelayMessageCancelOrder(order.getId())
redisOrderDelayQueue.add(order.getId(), 1800); // 30分钟后执行
取消时清除延迟任务(在 paySuccess() / cancelOrder() 中调用):
redisOrderDelayQueue.remove(orderId);
Redis Key 结构:
mall:delay:order:cancel → ZSet { orderId: score(执行时间戳) }
mall:delay:order:cancel:lock → 分布式锁防止并发轮询
轮询线程每1秒扫描一次,取出 score <= now 的订单执行 cancelOrder(),无需 RabbitMQ 即可实现超时自动取消,且不使用 @Scheduled 影响现有定时任务。

http://www.jsqmd.com/news/1291017/

相关文章:

  • Word图片批量导出并插入Excel的自动化方案
  • 数据团队 OKR 制定指南:从“做了多少报表“到“带来了多少增长“
  • 一个9年网安人的自白:30岁转行晚吗?从安服到架构师的转型之路(附完整学习路线图)
  • 幻兽帕鲁存档编辑器:3步轻松掌握游戏数据转换与编辑技巧
  • 2026 年 7 月新发布:德阳优秀的三元锂电池回收优质厂家怎么联系,你家淘汰的旧电动车锂电池,居然能值好几千?千万别乱卖,这门道可太黑! - 实业推荐官【官方】
  • 抖音小店一件代发如何做好商品管理?滞销品优化思路 - 抖掌柜
  • SPF实验动物质量控制与青岛中心应用指南
  • 华硕笔记本性能革命:3步实现轻量级硬件控制中心终极指南
  • STM32串口通信全解析:从TTL电平到USB转串口模块实战
  • 哨兵卫星数据批量下载实战:Python自动化流程与避坑指南
  • 《超限销金之城》10分钟单刷帅杰克:局外插件与局内BD组合攻略
  • Dijkstra算法与城市最短路问题详解
  • 传统文化 AI 化的趋势判断:从辅助工具到创意伙伴
  • 如何永久免费激活IDM:3种简单方法完整指南
  • Opus 5与Codex语音模式:AI多模态工作流开发实战指南
  • 深入解析BERT:从Transformer原理到实战微调与部署优化
  • 7月开源贡献路线图——从PagedAttention PR到推理框架调优指南
  • 2026 年更新:吉林专业的乌桕树品牌深度剖析,那棵被误认成乌桕树的老桩,藏着江南人几代人的秘密? - 企业推荐官【认证官方】
  • 心里发紧时听《正义的呼唤》
  • 数据仓库(数仓)核心架构、建模实战与典型应用场景全解析
  • 2026优选:值得信赖的惠州五金外壳生产厂家深度剖析 - 装修教育财税推荐2026
  • 中职计算机教资面试备考:从技术到教学的实战策略
  • Blender插件开发实战:Python控制层级对象与three.js数据导出
  • 2026年7月比较好的载货电梯门店推荐,自动人行横道电梯/室外扶梯/载货电梯/室内扶梯/人行扶梯,载货电梯门店口碑推荐 - 品牌推荐师
  • Unity WebGL Build文件夹深度解析:从核心文件到优化部署
  • 从东营去西藏,选对西藏正规地接社有多重要?这份西藏7日游避坑攻略请收好| 附:旅行社电话 - 西藏康泰旅行社
  • Blender插件开发实战:从Python API到自动化工作流优化
  • 《P10722 [GESP202406 六级] 二叉树》
  • Linux驱动加载:从编译到实战的完整指南
  • 2026 年新消息:仁和专业的企业食堂订餐系统制造企业哪家靠谱,企业餐食效率还能翻番?这玩意儿竟藏着食堂运营的大秘密 - 行业推荐【认证官】