码迷,mamicode.com
首页 > 其他好文 > 详细

秒杀系统防止库存超卖

时间:2018-06-07 13:57:08      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:source   te pro   秒杀   str   大型   rand   cts   string   method   

第一种:通过数据库乐观锁实现(小型电商)

update productstocks set realstock=realstock-#{buys} where sku = #{sku} and realstock-#{buys}>=0

根据受影响的行数判断是否执行成功

大型互联网不是这么玩的
数据库有瓶颈
第二种:使用redis 分布式锁实现

var resource = "the-thing-we-are-locking-on";
var expiry = TimeSpan.FromSeconds(5);
var wait = TimeSpan.FromSeconds(10);
var retry = TimeSpan.FromSeconds(1);
string sku = "001";

using (var redLock = RedisHelper.RedlockFactory.CreateLock(resource, expiry, wait, retry)) // there are also non async Create() methods
{
if (redLock.IsAcquired)
{
var r = RedisHelper.StringGet(sku);
var num = new Random().Next(1, 10);

if (Convert.ToInt32(r) >= num)
{
RedisHelper.StringDecrement(sku, num);
}
else
{
throw new Exception("商品已售罄");
}
}
}

秒杀系统防止库存超卖

标签:source   te pro   秒杀   str   大型   rand   cts   string   method   

原文地址:https://www.cnblogs.com/yxlblogs/p/9149825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!