用Redis+.net core做高并发遇到的问题。
突发奇想的想做高并发的例子了。最近看了一个关于core的开源框架,叫colder后台框架,是一位大牛写的,他还不断在更新完善,这里推荐给大家大佬的博客园
在做这次高并发我对自己遇到的几个问题进行总结吧:
1.首先在搭建redis环境的时候,因为我选择了那个大佬的框架,里面有封装的StackExchange.Redis,他对.net的支持还是挺好的,我直接用这个做了秒杀表的缓存,在vs资源包里面下载就可以了
2.首先我做的高并发就是商品秒杀,主要几个表有商品表,商品秒杀表,商品订单表,用户表,管理员表等(几个不重要的就不详细说了哈)。对于秒杀的一瞬间访问是巨大的,如果客户端频繁与服务器交互,会导致服务器瘫痪,所以必须将秒杀表存放在redis(具体是什么,怎么用这里就不说了)缓存中,在秒杀来临时,对商品剩余数量进行减一并存放在redis中,即秒杀成功。
重点来了,判断是否能够减一,必须也要从redis获取该缓存来判断,众所周知,redis是原子性的,但是如果两个用户同时在商品剩余数量为1时判断可以减一,问题就来了,会导致超卖,所以必须先判断后减一这整个操作没完成之前不允许其他用户操作,这个问题就只有锁和队列能够解决了,在翻阅资料后,发现StackExchange.Redis有redis分布式锁,只是大佬没封装,我随便封装了一下就拿来用了。
3.我用for循环100次ajax请求来测试,发现问题了,他总告诉我redis超时,这让我很头疼,翻阅了大量的资料后我发现需要用到单例模式来