如何通过性能拒绝同时发送的请求(基于PHP的API)

时间:2016-10-11 02:00:49

标签: php

虽然我有一些想法(IPC,使用mysql堆表,内存缓存)但我的想法似乎都没有“完美”地工作。

我想方法阻止来自同一用户的任何同时访问PHP脚本 访问我脚本的所有用户在每次通话时都会提供一个用户ID,因此我知道在打开它之前是谁敲门 然而,可能会发生用户“垃圾”我的API,我不希望任何人都可以访问该脚本而前一个“api调用”未完成。

我需要具有低系统影响且没有任何竞争条件的东西(即使请求在毫秒或更快的时间内进入也能完美处理)。

我很高兴为您解决类似问题的建议或信息。

平台就是Linux。

更新:
到目前为止,我拒绝使用数据库,因为我担心即使单次影响很小,每秒发送数千次更新或类似查询也会使服务器停止运行。
有时用户工具访问我的API是错误的,只是用大量查询轰炸它,如果通过我的数据库处理它,我希望它会成为性能损失。

1 个答案:

答案 0 :(得分:3)

如果我在你的情况下,我可能会从Redis开始。 Redis非常适合表现,而且可能还不错。

特别是,我会查看SETNX命令。我会考虑让密钥在一段时间后过期(因此,如果您的PHP代码死了并且没有删除密钥,那么您的客户不会无限期地被锁定)。

一旦我有这样的工作,并说服自己它会表现得很好,我会按照上面链接的页面上的建议,并查看distributed locks