当前位置: 首页 > news >正文

网站开发形式有哪些seo网站优化怎么做

网站开发形式有哪些,seo网站优化怎么做,模板中心,陕西省建设厅网站目的 本文主要是使用NetCore/Net8加上Redis来实现一个简单的秒杀功能,学习Redis的分布式锁功能。 准备工作 1.Visual Studio 2022开发工具 2.Redis集群(6个Redis实例,3主3从)或者单个Redis实例也可以。 实现思路 1.秒杀开始…

目的

本文主要是使用NetCore/Net8加上Redis来实现一个简单的秒杀功能,学习Redis的分布式锁功能。

准备工作

1.Visual Studio 2022开发工具

2.Redis集群(6个Redis实例,3主3从)或者单个Redis实例也可以。

实现思路

1.秒杀开始前,将商品的数量缓存到Redis中

2.使用Redis的分布式缓存锁,保证只有一个人能获取到锁,进而保证减库存的操作的原子性。

3.获取到Redis分布式锁后,开始后续的业务操作,减少库存。

实现代码

// See https://aka.ms/new-console-template for more information
using StackExchange.Redis;WriteLine("开始秒杀活动......");
WriteLine("请输入秒杀商品的ID,按回车键确认:", ConsoleColor.Blue);//ThreadPool.SetMinThreads(200, 200);var db = GetDataBase();string? productId = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(productId))
{int maxProductNumber = 100;//设置商品的最大库存数量await db.StringSetAsync($"ProductNumber:{productId}", maxProductNumber);//开始模拟购买List<Task> allTaskList = new List<Task>();for (int i = 0; i < 1000; i++){var task = BuyProduct(db, buyerId: i);allTaskList.Add(task);}await Task.WhenAll(allTaskList);int buySuccessNumber = Directory.GetFiles($"{AppContext.BaseDirectory}/buyer/").Length;WriteLine($"秒杀产品数量={maxProductNumber},购买成功用户数量={buySuccessNumber}", ConsoleColor.Green);Console.ReadLine();
}
else
{Console.WriteLine("输入商品ID为空,自动退出");
}IDatabase GetDataBase()
{ConnectionMultiplexer cm = ConnectionMultiplexer.Connect("127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384");return cm.GetDatabase();
}async Task BuyProduct(IDatabase db, int buyerId)
{int threadId = Environment.CurrentManagedThreadId;try{//首先获取当前库存,判断是否还可以购买var leftProductNumber = await GetProductCurrentNumberAsync(db, productId);if (leftProductNumber < 1){WriteLine($"线程Id={threadId},购买失败,用户Id:{buyerId},库存不足1,当前库存:{leftProductNumber}", ConsoleColor.Red);return;}string key = $"ProductId:{productId}";string lockValue = Guid.NewGuid().ToString();//锁的过期时间一定要比成功获取锁后操作业务所需的时间长,//否则会导致业务还没有操作完成(减库存)锁就释放了,导致后面的用户获取到锁,最终导致超卖的情况bool lockSuccess = await GetLockAsync(db, key, lockValue, TimeSpan.FromSeconds(5));if (!lockSuccess){WriteLine($"线程Id={threadId},用户Id={buyerId},购买锁获取失败", ConsoleColor.Red);return;}try{//再次获取当前库存,判断是否还可以购买leftProductNumber = await GetProductCurrentNumberAsync(db, productId);if (leftProductNumber < 1){WriteLine($"线程Id={threadId},购买失败:{lockValue},用户Id:{buyerId},库存不足2,当前库存:{leftProductNumber}", ConsoleColor.Red);return;}//扣减库存await db.StringDecrementAsync($"ProductNumber:{productId}");WriteLine($"线程Id={threadId},购买成功:{lockValue},用户Id:{buyerId}", ConsoleColor.Green);var dirPath = $"{AppContext.BaseDirectory}/buyer";if (!Directory.Exists(dirPath)){Directory.CreateDirectory(dirPath);}await File.WriteAllTextAsync($"{dirPath}/buy-success-{buyerId}.txt", $"锁Id={lockValue},用户Id={buyerId},产品Id={productId},剩余产品数量={leftProductNumber}");}finally{bool lockReleased = await db.LockReleaseAsync(key, lockValue);if (!lockReleased){WriteLine($"线程Id={threadId},用户Id={buyerId},锁释放失败:{lockValue}", ConsoleColor.Yellow);}}}catch(Exception ex){WriteLine($"线程Id={threadId},用户Id={buyerId},购买失败:{ex}", ConsoleColor.Red);}
}async Task<bool> GetLockAsync(IDatabase db, string key, string lockValue, TimeSpan timeout)
{//每个用户有五次获取Redis分布式产品锁的机会,如果5次重试后,都没有获取到锁,则默认秒杀失败int i = 5;while (i > 0){bool lockSuccess = await db.LockTakeAsync(key, lockValue, timeout);if (lockSuccess){return true;}await Task.Delay(TimeSpan.FromMilliseconds(new Random(Guid.NewGuid().GetHashCode()).Next(100, 500)));i--;}return false;
}async Task<long> GetProductCurrentNumberAsync(IDatabase db, string productId)
{string? leftProductNumberString = await db.StringGetAsync($"ProductNumber:{productId}");_ = long.TryParse(leftProductNumberString, out long leftProductNumber);return leftProductNumber;
}static void WriteLine(string text, ConsoleColor colour = ConsoleColor.White)
{Console.ForegroundColor = colour;Console.WriteLine(text);
}

运行效果

http://www.hkea.cn/news/842442/

相关文章:

  • 中国保密在线网站培训系统软文怎么做
  • 山西住房城乡建设部网站整合网络营销是什么
  • 做美图网站有哪些东西吗个人博客seo
  • 南昌专业做网站公司竞价托管怎么做
  • 网站产品展示怎么做微信小程序建站
  • dw做网站的流程客户引流的最快方法是什么
  • 做网站app优惠活动的交换链接营销成功案例
  • 企业公示信息查询系统山西上海百度推广优化公司
  • 上海网站排名优化价格武汉百度快照优化排名
  • 做网站小程序如何做广告宣传与推广
  • 网站建设背景朝阳百度新闻网页
  • 专门做拼团的网站西安网站开发
  • 怎么看网站开发语言太原seo推广
  • 什么网站做宣传好新乡网站seo
  • 济南网站制作服务价格信息流优化师前景
  • 新手制作网站工具bt磁力猪
  • 怎么做网站系统深圳头条新闻
  • 北京网站设计公司新鸿儒seo公司的选上海百首网络
  • 百姓网二手拖拉机百度seo优化排名客服电话
  • 北京南站是丰台站吗seo优化什么意思
  • 外贸营销型建站关键词全网搜索工具
  • 有什么网站可以做扣扣头像腾讯企点app下载安装
  • 网站设计怎么做链接拉新推广怎么快速拉人
  • 怎么自己做礼品网站补肾壮阳吃什么药效果好
  • 网站用户建设的设计与实现网站推广营销运营方式
  • html5韩国网站模板seo网站优化培训班
  • 网站被iframe信息推广的方式有哪些
  • 通信技术公司网站建设app推广代理
  • 做电影网站会违法吗营销说白了就是干什么的
  • 用外链技术做视频网站关键词在线听免费