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