您当前的位置: 首页 >  redis

少林码僧

暂无认证

  • 0浏览

    0关注

    317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

基于PHP+redis的秒杀系统

少林码僧 发布时间:2017-06-05 00:08:07 ,浏览量:0

PHP原生代码编写,没有基于框架,主要让用户了解秒杀原理。 github: https://github.com/sanjiOP/seckill seckill 秒杀系统 环境: 1. php5.6 + phpredis扩展 2. redis服务 3. apache2 4. mysql:table 商品表(goods) + 订单表(order) 实现功能: 1. 基于redis队列,防止高并发的超卖 2. 基于mysql的事务加排它锁,防止高并发的超卖 基于redis队列工作流程: 1. 管理员根据goods表中的库存,创建redis商品库存队列 2. 客户端访问秒杀API 3. web服务器先从redis的商品库存队列中查询剩余库存 4. redis队列中有剩余,则在mysql中创建订单,去库存,抢购成功 5. redis队列中没有剩余,则提示库存不足,抢购失败 基于mysql事务和排它锁工作流程: 1:开启事务 2:查询库存,并显示的设置写锁(排他锁):SELECT * FROM goods WHERE id = 1 FOR UPDATE 3:生成订单 4:去库存,隐示的设置写锁(排他锁):UPDATE goods SET counts = counts – 1 WHERE id = 1 5:commit,释放锁 注意:第二步不可以设置共享锁,不然有可能会造成死锁。 压测工具: apache自带ab测试工具 ./ab -n1000 -c100 http://host/buy_mysql.php apache自带ab测试工具 ./ab -n1000 -c100 http://host/buy_redis.php apache自带ab测试工具 ./ab -n1000 -c100 http://host/buy_transaction.php 如果您想下载到本地运行: 1. 修改 ./Seckill/Model/Model.php的mysql数据库链接信息 2. 修改 ./Seckill/Redis/QRedis.php的redis数据库链接信息 3. 访问:http://host/index.php 4. 访问规则:http://host/index.php?app=app&c=order&a=orderList&gid=1 github: https://github.com/sanjiOP/seckill
关注
打赏
1661398670
查看更多评论
立即登录/注册

微信扫码登录

0.0416s