架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 73192|回复: 27

[.NET Core] 【实战】ASP.NET Core 基于 Redis 分布式锁秒杀

[复制链接]
发表于 2020-9-26 15:34:26 | 显示全部楼层 |阅读模式
以前写的基于 zk 实现的分布式锁,如下:

.net/c# Zookeeper分布式锁的实现[源码]
https://www.itsvse.com/thread-4651-1-1.html
Redis 实现分布式锁原理:

.NET Core 基于 Redis 实现分布式锁原理解析
https://www.itsvse.com/thread-9391-1-1.html
Redis 实现分布式锁的原理是调用 redis 的 SETNX 命令,若键 key 已经存在, 则 SETNX 命令不做任何动作。命令在设置成功时返回 1 , 设置失败时返回 0 。


首先,我们网站模拟有 10000 件商品,然后写了一个控制台模拟HTTP请求用时40秒抢购完成,效果图如下:

QQ截图20200926150716.jpg

新建一个 ASP.NET Core 3.1 的网站,redis锁封装如下:

看到网上很多释放锁的写法如下:

但是,感觉可能会出现问题,在并发的情况下,有可能在判断的时候返回 true,确实是自己加的锁,但是在删除该锁的时候,有可能在极端的情况下,该锁已经被别的线程获取到了,万一把别人的锁给删除了。

所以,在获取到锁的时候,需要开启一个线程去延长锁的失效时间。

WeatherForecastController 接口如下:


可以通过命令行启动api网站,可以方便重启,如下:



新建一个 .NET Core 模拟 HTTP 请求,进行抢购,代码如下:


如有不对的地方,感谢提出指正。

最后,附上源码:

游客,如果您要查看本帖隐藏内容请回复





上一篇:JS 根据屏幕大小轮播图自适应
下一篇:Javascript 的 this 详解
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-5-9 21:12:58 | 显示全部楼层
网站模拟有 10000 件商品,然后写了一个控制台模拟HTTP请求用时 6 秒抢购完成


.NET Core 基于 Redis Lua 实现分布式锁[附源码]
https://www.itsvse.com/thread-9642-1-1.html


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-11-5 11:02:52 | 显示全部楼层
看看 Console.WriteLine($"抢购成功:{safeInstanceSuccessedCount},失败:{safeInstanceFailedCount},售完:{safeInstanceDoneCount}");
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-4-27 11:17:53 | 显示全部楼层
代码有些问题,Task 阻塞应该使用 await Task.Delay(i);  ,不要使用 sleep
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-9-27 14:13:33 | 显示全部楼层
mark,mark,mark
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-10-5 11:12:20 | 显示全部楼层
mark mark mark
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-11-2 15:39:13 | 显示全部楼层
dfdsfdsfds
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-11-5 10:08:13 | 显示全部楼层
需要源码哈哈哈哈哈哈
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-12-2 15:11:30 | 显示全部楼层
谢谢分享。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-12-7 21:10:03 | 显示全部楼层
【实战】ASP.NET Core 基于 Redis 分布式锁秒杀
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-12-9 17:17:34 | 显示全部楼层
看看实际效果和源码.
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-1-20 15:17:50 | 显示全部楼层
谢谢谢谢谢谢谢谢谢谢
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-1-26 16:10:46 | 显示全部楼层
MARK MARK MARK MARK
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 08:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表