redis使用Lua脚本解决多线程下的超卖问题及原因解析(redis集群命令行)墙裂推荐

随心笔谈11个月前发布 admin
64 0

namespace MengLin.Shopping.Redis.LuaScript
{
public class SecKillOriginal
{
static SecKillOriginal()
{
using (RedisClient client=new RedisClient(“127.0.0.1”, 6379))
{
//删除当前数据库中的所有Key, 默认删除的是db0
client.FlushDb();
//删除所有数据库中的key
client.FlushAll();
//初始化库存数量为1和订单数量为0
client.Set(“inventoryNum”, 1);
client.Set(“orderNum”, 0);
}
}
public static void Show()
{
for (int i=0; i < 3; i++)
{
Task.Run(()=>
{
using (RedisClient client=new RedisClient(“127.0.0.1”, 6379))
{
int inventoryNum=client.Get<int>(“inventoryNum”);
//如果库存数量大于0
if (inventoryNum > 0)
{
//给库存数量-1
var inventoryNum2=client.Decr(“inventoryNum”);
Console.WriteLine($”给库存数量-1后的数量-inventoryNum: {inventoryNum2}”);
//给订单数量+1
var orderNum=client.Incr(“orderNum”);
Console.WriteLine($”给订单数量+1后的数量-orderNum: {orderNum}”);
}
else
{
Console.WriteLine($”抢购失败: 原因是因为没有库存”);
}
}
});
}
}
}
}

© 版权声明

相关文章