关于高并发问题

现在无论是项目中还是面试的时候,大都会涉及到高并发的问题。首先随着数据量越来越大,高并发是一个经常遇到的问题,我这里简单总结一下从哪几方处理,来减少高并发率。 1、从数据库层面来讲,尽量做到数据库分离,一个功能模块对应一个数据库,表分离,功能模块涉及的表也尽量做到分离。

2、从代码层面讲,加互斥锁,但是效率会变低,用户体验会比较差。效率低下原因就是锁的执行机制,关于lock的介绍我前面有一片专门有简介。

3、RabbitMq队列,使用队列也能够解决多用户同时访问问题,来一个消息,加入队列,采用先进先出机制,但是当一个用户多次请求的时候就会出现别的问题。

4、同一个账户发送的多次请求,我们只认为第一次请求是有效的,剩下的都请都直接返回。因为是并发,要想做到第一次请求有效我们可以使用Redis incr存储用户的标识,Redis是单线程的,不存在并发的问题。incr返回为1那么是第一次请求,为N则是第N请求那么它就是无效的。请求标识:请求标识我们可以在抢单接口就进行判断,也就是先拿用户的标识Incr,返回为1则丢到队列,不为1则不丢到队列。 也可以在rabbitmq的消费端进行处理,从rabbitmq消息队列中拿到用户信息后,进行incr。再进行下一步操作,丢到了消息队列中,我们还需要去处理,consumer我们肯定是要有多个的,我们可以使用平分分发与手动交付。在这里我们把用户的信息进行入库,当然入库后我们再向Redis中存入一条入库标识

5、从前台考虑可以控制用户的点击次数,做一个时间间隔,比如每隔5秒才允许点击下一次。

以上方法都是减少高并发的一些措施,但不能完全消除高并发的情况,更多的还要具体问题具体分析。

posted @ 2018-01-11 10:25  pretty_girl  阅读(205)  评论(0编辑  收藏  举报