
1 em70 2022 年 7 月 16 日 修改 nginx 配置文件,把最大并发 IP 设为 1 limit_conn perip 1 |
2 ersic 2022 年 7 月 16 日 via Android 换个思路,让每个执行都持续一秒。 |
3 dangyuluo 2022 年 7 月 16 日 加锁和队列? |
4 xiangyuecn 2022 年 7 月 16 日 |
5 realpg PRO 这还用思路? 首先,多个请求,他们得有一个协商的地方,就是得有个公共的地方能存储状态 数据库,redis,memcache,或者 shmem 然后按秒做标志,考虑好锁存机制 或者利用关系数据库的一些特性去做,比如利用 mysql 的 unique 索引实现天然锁 |
6 zjsxwc 2022 年 7 月 16 日 via Android 用 mode 为 x 的 fopen 方式打开文件名为秒级时间戳的文件, 这样再某一秒中只有第一个 fopen 能成功, https://www.php.net/manual/zh/function.fopen.php |
8 imdong 2022 年 7 月 16 日 via iPhone 伪代码: if(!Redis::set(time())) return; |
10 treblex 2022 年 7 月 16 日 via iPhone 存一个时间戳,没过期之前都返回缓存结果,过期执行实际代码更新缓存 |
11 ersic 2022 年 7 月 16 日 redis 存一个 1s 过期的 key ,存在就不执行,不存在就执行,执行完继续存这个 key 。 |
12 k9982874 2022 年 7 月 16 日 via Android 起消息队列,消费者一秒只处理一个 |
13 vovov 2022 年 7 月 16 日 php 的话可以用 laravel 的原子锁 use Illuminate\Support\Facades\Cache; $lock = Cache::lock('foo', 1); if ($lock->get()) { // 锁定 1 秒... } |
14 GGGG430 2022 年 7 月 16 日 public static function lock($key, $ttl) { return apcu_add($key, 1, $ttl); } |
15 misaka19000 2022 年 7 月 16 日 漏桶算法 想要简单点可以直接用 apisix 网关管理 |
16 wonderfulcxm 2022 年 7 月 16 日 via iPhone 那不在这一秒执行的其他请求怎么处理,是直接返回 503 还是进入队列等待下一秒? |
17 cpstar 2022 年 7 月 16 日 我觉得 LZ 没想清楚的事情是,不是一秒钟内执行一个,而是每一秒钟怎么调配给不同的请求,是时间分配给请求,而不是请求来抢占时间。 |
18 keepeye 2022 年 7 月 16 日 redis setnx ,过期时间设为 1 秒 setnx 返回 1 的那个执行,其他的不执行 |
19 sutra 2022 年 7 月 16 日 搜“限流”,有算法,也有解决方案。 |
20 pengtdyd 2022 年 7 月 16 日 rxjs 可以做到,不过嘛这玩意学起来很难 |
21 cszchen 2022 年 7 月 16 日 via iPhone 是期望“每秒”只有一个请求,还是同一个时间点只有一个请求。区别很大,解决的思路很简单。 装个 redis ,获取原子锁,没有群的要等 |
22 liyunlong5 2022 年 7 月 17 日 via Android @em70 这个只是限制一个连接,真正限制请求要加上 limit req 1r/s |
23 rb6221 2022 年 7 月 17 日 加一层缓存就行了呗,一秒内的请求都走缓存 |
24 hoopan 2022 年 7 月 18 日 php 进程池只开一个呢,为啥会有这种奇怪的需求,原始需求是啥?如果是防止并发出错,可以加锁。 |
25 junwind 2022 年 7 月 18 日 第一个 ip 访问进来写一个 session ,第一个进来,如果有这个值就 return ,没试过,不知道能否实现你的要求 |
26 xuelu520 2022 年 7 月 18 日 加锁就行了 |
27 wolfie 2022 年 7 月 18 日 java 思路 请求扔队列,根据 ip 分组。 所有请求共用互斥锁,定义个守护线程循环 wait 、notify. |
28 tianyou666shen 2022 年 7 月 18 日 |