确保引用了StackExchange.Redis库
using StackExchange.Redis;
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
int totalSeats = 10;
int availableSeats;
while (true)
{
// 获取当前可用座位数
availableSeats = totalSeats - (int)db.HashLength("reservations");
if (availableSeats <= 0)
{
Console.WriteLine("对不起,座位已满!");
break;
}
Console.WriteLine($"当前可用座位数:{availableSeats}");
Thread[] threads = new Thread[availableSeats];
for (int i = 0; i < availableSeats; i++)
{
int seatNumber = i + 1;
threads[i] = new Thread(() => TryReserveSeat(db, seatNumber));
threads[i].Start();
}
foreach (var thread in threads)
{
thread.Join();
}
}
redis.Close();
}
static void TryReserveSeat(IDatabase db, int seatNumber)
{
string username = Guid.NewGuid().ToString(); // 使用随机用户名
string seatKey = $"seat{seatNumber}";
if (db.HashExists("reservations", seatKey))
{
Console.WriteLine($"座位{seatNumber}已经被预订!");
}
else
{
if (db.HashSet("reservations", username, seatKey))
{
Console.WriteLine($"座位{seatNumber}由用户{username}预订成功!");
}
else
{
Console.WriteLine($"座位{seatNumber}预订失败!");
}
}
}
}