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

随心笔谈2年前发布 编辑
128 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($”抢购失败: 原因是因为没有库存”);
}
}
});
}
}
}
}

© 版权声明

相关文章