基于PHP+redis的秒杀系统
来源:互联网 发布:乌鲁木齐网页seo 编辑:程序博客网 时间:2024/06/06 01:55
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
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
阅读全文
0 0
- 基于PHP+redis的秒杀系统
- 基于PHP+redis的秒杀系统
- 基于PHP+redis的秒杀实现
- php redis秒杀
- Redis秒杀系统的架构设计
- Redis实现秒杀系统
- 用 Redis 轻松实现秒杀系统的构思
- 基于redis分布式锁实现“秒杀”
- 基于redis分布式锁实现“秒杀”
- 基于redis分布式锁实现"秒杀"
- 基于redis分布式锁实现“秒杀”
- 基于redis分布式锁实现“秒杀”
- 基于redis分布式锁实现“秒杀”
- 基于redis分布式锁实现“秒杀”
- 基于redis分布式锁实现“秒杀”
- 基于Nginx+PHP+Redis的短URL系统的实现
- php结合redis实现秒杀2
- 基于SSM框架+Mybatis+Maven的秒杀系统
- 【计蒜之道 】微软大楼设计方案
- 精益 React 学习指南 (Lean React)- 2.2 webpack
- java日期Date与Timestamp的equals差异
- Map的基本用法,增删查,排序
- Redis与Memcached的区别-都属于分布式缓冲架构产品
- 基于PHP+redis的秒杀系统
- 一小时包教会 —— webpack 入门指南
- Python实现SQL模拟功能
- 多个内容面板添加到内容面板的多个方向
- 利用pytorch实现的斗图机器人接口
- Androi布局以及基本button
- 一小时包教会 —— webpack 入门指南
- Redis 初次尝试
- MFC单文档分割窗口