面试问题浓缩总结 面试问题浓缩总结
  • Go
  • Java
  • C/C++
  • JavaScript/HTML
  • MySQL
  • Redis
  • MongoDB
  • 操作系统
  • 计算机网络
  • spring全家桶
  • mybatis
  • 中间件
  • 软件相关
  • 系统相关
  • 算法
  • 数据结构
  • 设计模式
  • CMU硕士经典100题
  • 剑指offer
  • 重点手撕代码
  • 程序员面试金典
  • 3月
  • 4月
  • 智力题
  • 业务问题
  • 一些技术
  • 安全相关
APP下载 (opens new window)
GitHub (opens new window)
  • Go
  • Java
  • C/C++
  • JavaScript/HTML
  • MySQL
  • Redis
  • MongoDB
  • 操作系统
  • 计算机网络
  • spring全家桶
  • mybatis
  • 中间件
  • 软件相关
  • 系统相关
  • 算法
  • 数据结构
  • 设计模式
  • CMU硕士经典100题
  • 剑指offer
  • 重点手撕代码
  • 程序员面试金典
  • 3月
  • 4月
  • 智力题
  • 业务问题
  • 一些技术
  • 安全相关
APP下载 (opens new window)
GitHub (opens new window)
  • 智力题

  • 业务问题

    • 设计一个抢红包功能
    • 秒杀系统设计
    • 设计一个IM系统
    • 设计一个数据库连接池
  • 一些技术

  • 安全相关

  • 其他
  • 业务问题
小游
2021-03-30

设计一个抢红包功能

这个其实可以使用事务来实现,比如我们可以用MySQL,抢红包时先开启事务,然后加上行锁,修改完毕后我们提交事务,释放行锁

或者我们可以使用Redis,我们获取分布式锁,然后对数据进行操作,流程图如下

img

  • 老板发红包,此时缓存初始化红包个数,红包金额(单位分),并异步入库。
  • 抢红包,判断缓存剩余红包金额,剩余金额大于零则抢到红包,否则手慢了,红包派完了
  • 拆红包,根据 redPacketId 获取分布式锁,如果获取到锁,红包个数减一,如果剩余红包个数大于零抢红包成功、否则失败。成功则计算红包金额,缓存总红包金额减去抢到的红包金额,异步入库、异步到账。

参考

  1. 微信红包的设计考虑 | 鱼儿的博客 (yuerblog.cc) (opens new window)
  2. 微信高并发抢红包秒杀实战案例 - 知乎 (zhihu.com) (opens new window)
编辑 (opens new window)
上次更新: 2021/03/31, 20:52:00
面试常问
秒杀系统设计

← 面试常问 秒杀系统设计→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式