1.目的:模型了解分布式锁的概念
2.思路:
1)服务集群下(多的网站使用同一套代码和数据库)
2)某些更新数据库操作需要进行一条一条执行
3)通过Redis进行枪锁,得到锁的人才能操作数据库
4)拓展Zookeepe、redis、MySql等进行锁的设计
/// <summary>
/// 扣减库存
/// 做4件事情
/// </summary>
/// <returns></returns>
[HttpGet("SubStock")]
public IActionResult SubStock()
{
#region 1、扣减库存流程
{
/*lock (_lock)
{*/
// RedisLock redisLock = new RedisLock();
ZookeeperLock zookeeperLock = new ZookeeperLock();
// 工厂 + 反射 + 配置文件
// 23种 1 2
zookeeperLock.Lock();
// 1、获取商品库存
var stocks = getPorductStocks();
// 2、判断商品库存是否为空
if (stocks.Count == 0)
{
// 2.1 秒杀失败消息
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:不好意思,秒杀已结束,商品编号:{stocks.Count}");
zookeeperLock.UnLock();
return new JsonResult("秒杀失败");
}
// 3、秒杀成功消息
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:恭喜你,秒杀成功,商品编号:{stocks.Count}");
// 4、扣减商品库存
subtracProductStocks(stocks);
zookeeperLock.UnLock();
/* }*/
return new JsonResult("秒杀成功");
}
#endregion
#region 2、扣减库存流程-单机并发
{
}
#endregion
#region 3、扣减库存流程-集群并发
{
}
#endregion
return new JsonResult("秒杀成功");
}
备注:通过网上体验课学习的
代码源文件(教程和讲解、文件):https://download.csdn.net/download/weixin_42401291/20620706
有使用到:redis、MySQL、.net core(.net 6)、ef core等技术
----------------------
实践
1.下载redis工具
2.下载地址:https://github.com/tporadowski/redis/releases。
3.运行文件
4.应用.net的redis工具:StackExchange.Redis;
// 1、redis连接管理类
private ConnectionMultiplexer connectionMultiplexer = null;
// 2、redis数据操作类
private IDatabase database = null;
public RedisTools()
{
connectionMultiplexer = ConnectionMultiplexer.Connect("localhost:6379");
database = connectionMultiplexer.GetDatabase(0);
}
5.对redis操作