猿问

如何在高并发下,http请求返回绝对的当前请求是第几个请求?

比如,我第一次访问请求返回json:
{"n": 1}

我第100次访问请求返回json:
{"n": 100}

传统的写数据库,再查数据库返回,在并发大时好像不能保证,我应该怎么办?这应该是最简化了的问题了


Helenr
浏览 829回答 6
6回答

慕莱坞森

最简单的方法就是建个自增id主键的mysql表,然后每来一次请求就插一条记录,再读出这条记录,读出的id就是你要的值。然后就可以根据id值来轻松处理高并发的场景了,比如【秒杀】就可用id小于300且能被6整除的规则认为秒杀成功;【抽奖】可以用能被100整除(百分之一概率)作为中奖等等。如果自己实现也无非就是单线程死循环处理socket请求维护一个全局变量,不如用现成的mysql方便可靠。

慕田峪9158850

使用redis中的setnx(id),单线程保证每次加1,而且还是内存数据库,速度超级快。

慕沐林林

读操作:使用缓存写操作:使用队列异步写入

忽然笑

纯粹Java的话,可以把计数器对象做成单例,通过filter拦截所有请求计算器加1(需要同步)。不知道你说的数据库是什么意思,{n : 100},n是数据库拿的?
随时随地看视频慕课网APP

相关分类

Java
我要回答