+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 源码论坛 > 秒杀之面试 >

秒杀之面试

时间:2024-12-07 15:16:31
需要考虑:
高并发、限流、超卖[库存]、异步处理、安全性、性能优化、测试
涉及到的点:
架构、redis事务(watch)、超卖、mysql锁
特点:
高并发、负载大、读多写少
 
1、mysql读写服务器4台;redis服务器2台;Nginx负载均衡+nginx限流+nginx缓存
2、具体实现:
1)、后台设置秒杀商品,将此商品写入redis缓存(商品Id、数量),hash形式
2)、前台秒杀页面分两个接口:
实时数据接口例如商品是否售罄(redis里获取、一秒钟查询一次);另一个接口是不经常变的信息可以直接放到反向代理服务器上(nginx、nginx缓存设置详见nginx之面试),这样就不用请求php了,也提高了速度;js、css、图片都放到cnd服务器
3)、秒杀开始后用户点击购买按钮,按钮置灰,防止重复点击,重复请求服务器;
4)、请求到后端之后减redis里的库存用watch
redis事务:
实现减redis库存: watch+事务(MULTI + EXEC),减完库存之后为了提高用户体验度,直接返回成功;将这个商品放入此商品对应的消息队列中,后台脚本跑这个消息队列,减去数据库中的库存(用事务+意向锁(select column from table lock in share mode)+排它锁(SELECT column FROM table … FOR UPDATE))。用事务的时候注意将自动提交关闭,SET autocommit=0 。
3、ab压力测试
ab命令非常实用,它不仅可以对Apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试,ab命令会创建多个并发线程,模拟多个访问者同时对某一个url地址进行访问,实现压力测试。原理类似CC攻击,可能会造成目标服务器资源耗尽,严重时可能会导致死机。
-n 访问的总次数,-c 访问的并发量
ab -n 1000 -c 900 http://192.168.176.30/index.html
 
4、每秒请求数: qps
 
5、如果问为什么没有用的redis锁,就说锁会出现死锁,不太好解决,死锁的解决详见redis锁之面试
 
上一篇:redis 常用命令
下一篇:nginx之面试

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title