Login
网站首页 > 文章中心 > 其它

.net Redis分布式锁

作者:小编 更新时间:2023-08-17 08:28:48 浏览量:88人看过

在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程,多通道等技术把计算机的计算速度大幅度提升,原来同一时间只能执行一条cpu指令的时代已经过去.随着多条cpu指令可以并行执行的原因,原来不曾出现的资源竞争随着出现,在程序中的体现就是随处可见的多线程环境.比如要更新数据库的一个信息,如果没有并发控制,多个线程同时操作的话,就会出现互相覆盖的现象发生.

锁要解决的就是资源竞争的问题,也就是要把执行的指令顺序化.

在互联网背景下,电商行业是普遍都是多线程执行,并发量大.比如下单秒杀抢购商品活动,属于高并发情况,库存的保证就尤其重要了,不能出现超卖现象.程序员所要做的事情就是需要单线程执行获取库存,再减库存操作,保证数据原子性.

在多台服务器中,锁就是重点.

2、应用

.net Redis分布式锁-图1

2.1? Store商品存储-Dictionary

数据库不存在的情况下,用Dictionary来代替

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

创建了Store后,主程序创建下单,单线程执行.

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

.net Redis分布式锁-图2

执行结果:

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

改成多线程执行,直接出现超卖现象,其中用Task.Run 模拟多线程,其中Order(int i) i变量注意,不能直接填写i,异步中上下文不存在,因为主线程以及跑完了,再运行异步Task线程,这时变量已是最后一个被覆盖.

解决方案是重复赋值变量替换

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

结果:

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

解决方案:

2.1.1? lock 加锁

lock很明显影响性能.

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

正常.

ConcurrentDictionary 本身是线程安全的,源代码就是加了lock

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

执行结果符合.

2.2 用Redis分布式锁

redis是单线程运行,所以适合.原理也很简单,运用redis以下指令

原理如下:

①.、先获取redis锁,设置一个随机字符串

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍

结果显示0,正确,没超卖

以上就是土嘎嘎小编为大家整理的.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍相关咨询咨询主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章