抢红包: 红包过期失效案例

本文介绍了微信红包业务中24小时内未领取完的红包会自动失效的机制。架构设计包括缓存初始化、红包数据入延迟队列,以及红包过期后的处理。通过Java的DelayQueue实现延迟队列功能,当红包过期时,会清空缓存并更新数据库。此外,还讨论了该机制适用于淘宝订单到期、限时支付等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

微信红包业务,发红包之后如果24小时之内没有被领取完就自动过期失效。

一. 架构设计

在这里插入图片描述

二. 业务流程

老板发红包,此时缓存初始化红包个数,红包金额(单位分),并异步入库。
红包数据入延迟队列,唯一标识+失效时间
红包数据出延迟队列,根据唯一标识清空红包缓存数据、异步更新数据库、异步退回红包金额

三. 代码案例

这里我们使用Java内置的DelayQueue来实现,DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。

老板发了10个红包一共200人民币,假装只有9个人抢红包。

  • 发红包,缓存数据进入延迟队列:
/**
     * 有人没抢 红包发多了
     * 红包进入延迟队列
     * 实现过期失效
     * @param redPacketId
     * @return
     */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Freedom3568

技术域不存在英雄主义,不进则退

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值