微信抢红包过期失效实战案例
前言 微信红包业务,发红包之后如果24小时之内没有被领取完就自动过期失效。 架构设计 业务流程 老板发红包,此时缓存初始化红包个数,红包金额(单位分),并异步入库。 红包数据入延迟队列,唯一标识+失效时间 红包数据出延迟队列,根据唯一标识清空红包缓存数据、异步更新数据库、异步退回红包金额 代码案例 这里我们使用 Java 内置的 DelayQueue 来实现, DelayQueue 是一个***的 BlockingQueue ,用于放置实现了 Delayed 接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。 老板发了10个红包一共200人民币,假装只有9个人抢红包。 发红包,缓存数据进入延迟队列: /** * 有人没抢 红包发多了 * 红包进入延迟队列 * 实现过期失效 * @param redPacketId * @return */ @ApiOperation(value="抢红包三",nickname="爪哇笔记") @PostMapping("/startThree") public Result startThree(long redPacketId){ int skillNum = 9; final CountDownLatch latch = new CountDownLatch(skillNum);//N个抢红包