【Java 实战】通过Redis 和 MQ 简单实现秒杀功能

项目场景

实现一个商品秒杀的功能,能后台自定义秒杀时间段、商品库存等信息。

一、设计思路

这里简单分享下思路:

1.限流

秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增,由于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。这里使用基于Redis简单粗暴的限流方案:信号量(Semaphore)

信号量就是可以被 多个线程同时持有 的 一种同步对象,比如我设置一个值为5的计数信号量,那么现在有十个线程来获取他就只会有五个可以成功,剩下那五个则获取失败。

所以说如果有个计数信号量定义的值是1,那么他其实就等同于 mutex (互斥锁)

2.具体流程

这里首先需要明确如何缓存秒杀的商品信息?

  • 这里是根据秒杀活动状态来缓存秒杀的商品信息,上下架秒杀活动就会将商品信息缓存到Redis中。
  • 秒杀成功使用消息队列发送订单信息,RabbitMQ监听器在接受到消息后,将订单信息写入数据库。
  • 在秒杀时使用redisson对商品信息上锁,由于打算使用信号量,而信号量本质就是一种锁,所以不用再加锁。

二、数据库设计

1.秒杀活动表

存储秒杀活动信息seckill_info

字段 描述
id(varchar)
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.猫的树

你的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值