【发布时间】:2011-06-25 05:02:26
【问题描述】:
例如,假设您向数千名订阅者发送简报,并宣传“点击此链接的前一百人可获得 10% 的折扣”。作为一个极端的例子,假设在几秒钟内有数千次点击到达。确保在第 100 次点击后锁定的正确方法是什么,这样 101 或 102 位客户就没有机会收到“恭喜获得折扣消息”
【问题讨论】:
标签: php
例如,假设您向数千名订阅者发送简报,并宣传“点击此链接的前一百人可获得 10% 的折扣”。作为一个极端的例子,假设在几秒钟内有数千次点击到达。确保在第 100 次点击后锁定的正确方法是什么,这样 101 或 102 位客户就没有机会收到“恭喜获得折扣消息”
【问题讨论】:
标签: php
您可以创建一个锁定文件并flock($fp, LOCK_EX) 它以确保只有一个 (PHP) 进程可以同时打开它。
成功锁定文件后,您处理请求,完成后,flock($fp, LOCK_UN) 它。
$fp是fopen()返回的文件句柄。
当然,你也可以使用互斥体,但在 PHP 中默认情况下不启用它们。
这里是羊群解决方案的流程图:
【讨论】:
有一个表格,您可以在其中写下收到的回复。然后很容易检查特定响应是否在前 100 行中 - 只需在按相应字段排序时查看它是否在前 100 行中。
让 MySQL 为您完成所有艰苦的锁定工作!
【讨论】:
您可以使用BEFORE INSERT 触发器,从另一个表Can you access the auto increment value in MySQL within one statement? 和abort 中提取自动增量(如果它大于100)。
【讨论】: