文章摘要
这篇文章介绍了如何使用Redis客户端在静态初始化和多线程循环中实现库存和订单的动态管理。文章通过Redis数据库进行了库存初始化,设置了初始库存数量为1和订单数量为0。在Show方法中,使用多线程循环从Redis中读取库存和订单数据,并根据库存情况动态调整库存和订单。当库存为0时,系统会提示“抢购失败: 原因是因为没有库存”。文章的核心内容是通过Redis进行库存和订单的管理,并展示了多线程在业务逻辑中的应用。
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($”抢购失败: 原因是因为没有库存”);
}
}
});
}
}
}
}
{
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($”抢购失败: 原因是因为没有库存”);
}
}
});
}
}
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。