Redis基础之【3.Net Core对接Redis实现简单秒杀功能】

Redis基础之【3.Net Core对接Redis实现简单秒杀功能】

一. 简单秒杀

Redis基础之【3.Net Core对接Redis实现简单秒杀功能】

  1.秒杀开始之前,先将商品预设的秒杀库存数量加载到Redis中;
  2.后台服务1接收到秒杀请求时,先判断Redis库存是狗足够,如果足够执行第三步,如果库存不足时,直接返回秒杀失败,
  3.减掉Redis预设库存并将请求放入异步队列中,返回正在排队中;
  4.后台服务2用于消费队列,获取队列信息后首先判断真实库存是否足够,如果库存不足,直接返回秒杀失败,如果库存足够就生成订单信息并通知用户秒杀成功。

  在这个demo,我们设置30个Redis秒杀数量。模拟100个请求进行抢购。

  后台服务1:效果抢购效果如下

Redis基础之【3.Net Core对接Redis实现简单秒杀功能】

  后台服务2:消费队列效果如下

Redis基础之【3.Net Core对接Redis实现简单秒杀功能】
  
  注意:因为redis是单线程的 它在处理命令或者指令的时候,后台只有一个处理指令线程。也就是说我们发送给redis服务的指令,不管在任何时候,在同一时刻只会执行一条指令,所以在redis操作的部分我们使用自减命令Decr是不会出现“超卖”的。

二. 总结

  本文使用String和List的完成的秒杀小Demo,目标只是为了简单入门理解。真实开发需要做的封装和优化,而且Redis做消息队列如果出现系统宕机的情况容易信息丢失并且没有处理机制,可靠性不够高,适用于对信息准确性要求不高的场景。
  如果搭建集群同时操作数据库,无论是秒杀或者非秒杀,在高并发场景下都面临出现超卖的问题??后续我们会继续探讨:分布式锁