需求是这样:
目前我的解决方法:
采用了定时器 1(1 分钟)将用户需要更新的数据投递至一个全局变量,随后另一个定时器 2(100ms)取出全局变量以用户分组并锁住对应用户状态,异步执行,每个异步线程中采用同步保持每分钟 150 次的频率,执行完成后解除用户锁状态。因最初没有发现该频率问题所以最初为并发模式,但是现在看来需要重新设计,大家有什么好的方案吗?
1
laravel 2020-01-10 11:08:34 +08:00
用队列吧,1 分钟之内如果加入队列的超过 150 就丢弃
|
2
snowfuck 2020-01-10 11:22:29 +08:00
这样行不行:
内存中维护一个 map,通过 id 取出用户数据,然后通过互斥锁来更新。对一个用户更新时,要先获取到这个用户的锁,获取不到则等待。对不同用户更新其实就没关系,直接从 map 中根据用户 id 取出来对应用户数据更新即可。 |
3
orzorzorzorz 2020-01-10 17:43:13 +08:00
云一下。频率那么高,不如建一个持久链接,监听服务器的全局变量,事件触发更新。用户发起操作数据,先看看全局变量是不是在被操作,如果是就返回个 pending 的状态,等操作完再从服务器发个请求过去。
|
4
KentY 2020-01-10 23:30:36 +08:00
"每个用户需要进行数据更新" 每个用户是只要更新自己的数据么? 数据是存储在数据库么?
|