一、分布式锁文件 说明mall-common/.../lock/RedisDistributedLock.java 核心锁工具SET NX PX 加锁 Lua 脚本原子解锁mall-common/.../lock/DistributedLock.java DistributedLock 注解mall-common/.../lock/DistributedLockAspect.java AOP 切面支持 SPEL 动态 keymall-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 类获取 BeanRedisService.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 影响现有定时任务。