为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2019-03-14 18:19:06
比如,我第一次访问请求返回json:{"n": 1}我第100次访问请求返回json:{"n": 100}传统的写数据库,再查数据库返回,在并发大时好像不能保证,我应该怎么办?这应该是最简化了的问题了
查看完整描述

6 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

最简单的方法就是建个自增id主键的mysql表,然后每来一次请求就插一条记录,再读出这条记录,读出的id就是你要的值。

然后就可以根据id值来轻松处理高并发的场景了,比如【秒杀】就可用id小于300且能被6整除的规则认为秒杀成功;【抽奖】可以用能被100整除(百分之一概率)作为中奖等等。

如果自己实现也无非就是单线程死循环处理socket请求维护一个全局变量,不如用现成的mysql方便可靠。


查看完整回答
反对 回复 2019-04-23
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-04-23
?
慕沐林林

TA贡献2016条经验 获得超9个赞

  • 读操作:使用缓存

  • 写操作:使用队列异步写入


查看完整回答
反对 回复 2019-04-23
?
忽然笑

TA贡献1806条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-04-23
  • 6 回答
  • 0 关注
  • 828 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信