Redis学习之秒杀业务优化
优化思路:
-
串行改并行:原本由 1 个线程的操作改为由 2 个或多个线程同时操作,比如 1 个线程负责判断秒杀资格,1 个线程负责减库存 + 创建订单(写) 同步改异步:
-
-
其余的写库操作可以异步执行。 提高判断秒杀资格的性能:读 DB 改为读 Redis
优化后的流程:
当用户下单之后,判断库存是否充足只需要导redis中去根据key找对应的value是否大于0即可,如果不充足,则直接结束,如果充足,继续在redis中判断用户是否可以下单,如果set集合中没有这条数据,说明他可以下单,如果set集合中没有这条记录,则将userId和优惠卷存入到redis中,并且返回0,整个过程需要保证是原子性的,我们可以使用lua来操作
当以上判断逻辑走完之后,我们可以判断当前redis中返回的结果是否是0 ,如果是0,则表示可以下单,则将之前说的信息存入到到queue中去,然后返回,然后再来个线程异步的下单,前端可以通过返回的订单id来判断是否下单成功。
这样一来,性能得到大大提高。