首先了解一点程序会出现并发,但是redis不会因为它是单线程的!
using ServiceStack.Redis;
using System;
using System.Threading.Tasks;
namespace ConsoleRedis
{
class Program
{
/// <summary>
/// 秒杀是否结束
/// </summary>
private static bool IsAble = true;
static void Main(string[] args)
{
//实现秒杀
//新增库存
var redisManager = new RedisManagerPool("127.0.0.1:6379");
//新增10个库存
using (IRedisClient redis = redisManager.GetClient())
{
redis.Increment("KillStock", 10);
}
for (int i = 0; i < 100; i++)
{
int k = i;
Task.Run(() =>
{
using (IRedisClient redis = redisManager.GetClient())
{
if (IsAble)
{
if (redis.DecrementValue("KillStock") >= 0)
{
Console.WriteLine($"秒杀ID {k.ToString("000")} 秒杀成功!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
else
{
if (IsAble) IsAble = false;
Console.WriteLine($"秒杀ID {k.ToString("000")} 秒杀失败,秒杀结束。。。。。。。。。。");
}
}
else
{
Console.WriteLine($"秒杀ID {k.ToString("000")} 秒杀结束!");
}
}
});
}
Console.ReadLine();
}
}
}