关于秒杀系统,可以从以下几个方面设计:
前端
1、nginx负载均衡,将请求分发到各个服务器,减轻压力。
2、js、css压缩,减少流量以及请求次数。
3、cdn加速。
缓存
1、采用redis缓存,可以提前将某些秒杀的数据加载到缓存。如库存先加载到缓存,判断缓存里的库存,成功后再继续,同时为了防止大量访问redis,可以用共享变量标识是否卖完,如卖完了,则直接返回,不用访问redis。
2、页面缓存,即将页面直接缓存到redis,或者页面静态化,即前后端分离。
3、开启浏览器缓存。
限流
1、使用消息队列,例rabbitmq进行消峰。
2、利用验证码防止恶意刷单,可以有效降低单位时间内访问次数。
3、地址隐藏,防止知道地址后提前购买以及多刷。
4、一定时间内限制url访问次数。
数据库
1、利用行级锁,先扣库存,成功后再创建订单,防止超卖。
2、唯一索引,防止重复购买。
3、数据库读写分离,如mycat。