使用Redis实现秒杀系统防止超卖保护数据库

  • 如何减小数据库压力?
    使用列表或集合,预先存入n个令牌值,到来的请求使用SPOP或者LPOP拿取令牌,拿到以后才可以进行数据库操作。这可以避免数据库接收到过多的请求;
  • 如何防止超卖?
    - 乐观锁:在表内增加version字段,每次修改时增加对前一次读到的version的判断及新version的更新,如果version不匹配,则修改失败,重读version重试;
    - 悲观锁:使用排他锁
  • 如何防止恶意多次抢购?
    使用SETNX,将用户ID作为键值,如果返回添加成功(1)表示是初次访问,否则拒绝后续访问。为该键值设置过期时间即可限制多久可以访问一次。
原文地址:https://www.cnblogs.com/pravez/p/13947685.html