C#怎么使用redis实现秒杀功能

发布网友 发布时间:2022-04-21 19:06

我来回答

2个回答

热心网友 时间:2022-04-06 03:00

大概思路吧:

秒杀系统的架构设计

秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 
写入内存而不是写入硬盘 
异步处理而不是同步处理 
分布式处理 
用上这三招,不论秒杀时负载多大,都能轻松应对。更好的是,Redis能够满足上述三点。因此,用Redis就能轻松实现秒杀系统。 
用我这个方案,无论是电商平台特价秒杀,12306火车票秒杀,都不是事:)

下面介绍一下为什么上述三种性能优化思路能够解决秒杀系统的性能问题:

热心网友 时间:2022-04-06 04:18

下面是一个简单的下单操作

<?php
include "MMysql.class.php";
$configArr=[
'host'=>,
'port'=>,
'user'=>,
'passwd'=>,
'dbname'=>,
];
$db = new MMysql($configArr);
$sql="select * from sdb_b2c_procts where proct_id='38'";
$proct=$db->doSql($sql);
if(!$proct){
echo "error:not find proct";
return;
}
$proct=$proct[0];
if($proct['store']-$proct['freez']<1){
echo "error:no store";
return;
}
$sql="select * from sdb_b2c_member_addrs where member_id='256187'";
$addr=$db->doSql($sql);
$addr=$addr[0];
$data=[
'order_id'=>date('ymdHis').rand(100,999),
'total_amount'=>$proct['price'],
'final_amount'=>$proct['price'],
'pay_status'=>'0',
'createtime'=>time(),
'shipping_id'=>'13',
'shipping'=>'韵达',
'member_id'=>'6363',
'ship_area'=>$addr['area'],
'shipname'=>$addr['name'],
'ship_addr'=>$addr['addr'],
];
$order=$db->insert('sdb_b2c_orders',$data);
if($order){
$sql="update sdb_b2c_procts set freez=freez+1 where proct_id='38'";
$db->doSql($sql);
echo "order create success";
return;
}else{
echo "error:order create fail";
return;
}

?>

代码解释为:
在商品表中找到商品,获取实际库存和虚拟库存,如果时间库存减去虚拟库存小于1,则表示没有库存了
如果有实际库存,则去找memeber_id为'256187' 的会员收货地址信息,然后创建订单
如果订单创建成功,则更新虚拟库存。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com