用StackExchange.Redis+.net core做高并发遇到的问题

用Redis+.net core做高并发遇到的问题。
突发奇想的想做高并发的例子了。最近看了一个关于core的开源框架,叫colder后台框架,是一位大牛写的,他还不断在更新完善,这里推荐给大家大佬的博客园

在做这次高并发我对自己遇到的几个问题进行总结吧:
1.首先在搭建redis环境的时候,因为我选择了那个大佬的框架,里面有封装的StackExchange.Redis,他对.net的支持还是挺好的,我直接用这个做了秒杀表的缓存,在vs资源包里面下载就可以了
用StackExchange.Redis+.net core做高并发遇到的问题_第1张图片

2.首先我做的高并发就是商品秒杀,主要几个表有商品表,商品秒杀表,商品订单表,用户表,管理员表等(几个不重要的就不详细说了哈)。对于秒杀的一瞬间访问是巨大的,如果客户端频繁与服务器交互,会导致服务器瘫痪,所以必须将秒杀表存放在redis(具体是什么,怎么用这里就不说了)缓存中,在秒杀来临时,对商品剩余数量进行减一并存放在redis中,即秒杀成功。

重点来了,判断是否能够减一,必须也要从redis获取该缓存来判断,众所周知,redis是原子性的,但是如果两个用户同时在商品剩余数量为1时判断可以减一,问题就来了,会导致超卖,所以必须先判断后减一这整个操作没完成之前不允许其他用户操作,这个问题就只有锁和队列能够解决了,在翻阅资料后,发现StackExchange.Redis有redis分布式锁,只是大佬没封装,我随便封装了一下就拿来用了。

3.我用for循环100次ajax请求来测试,发现问题了,他总告诉我redis超时,这让我很头疼,翻阅了大量的资料后我发现需要用到单例模式来创建redis,因为它可以解决客户端只能创建一个实例,而且能访问全局,我便自己有封装了一下redis,可还是报超时的错,什么鬼。

4.功夫不负有心人,终于在一个博客上看到,如果用redis处理高并发需要用redis的异步请求,啊,我瞬间明白了,我是说StackExchange.Redis里面有好多方法都加了一个async,我就直接换成异步请求,果然,高并发完成。

哈哈,最后看一下我并发的结果,在10w的数据下,还是很逞强,花了3分钟左右,不过1w以下的并发量还是可以接受的,下面是测试的1000个并发量,还是相当快的。
1000个数据的测试

你可能感兴趣的:(学习)