例如,假设您向几千名订户发送了简讯,并且您宣传“点击此链接的前100名可获得10%的折扣”。作为一个极端的例子,假设数千次点击在几秒钟内到达。有什么正确的方法来确保在100次点击事件被锁定之后,101或102个客户没有机会得到“恭喜获得折扣信息”实现PHP/MySQL交易锁定机制的正确方法
2
A
回答
4
您可以创建一个锁定文件和flock($fp, LOCK_EX)
它以确保只有一个(PHP)进程可以同时打开它。 成功锁定文件后,您处理该请求,并在完成时flock($fp, LOCK_UN)
它。
$fp
是由fopen()
返回的文件句柄。
当然,您也可以使用互斥锁,但它们在PHP中默认情况下未启用。
这里的一个流“表”羊群溶液:
- 打开锁文件(可以简单地一个空文件)
- 锁定该文件。如果另一个进程已经锁定它,这个调用将阻塞,直到另外一个锁释放
- 检查用户是否仍然有资格做任何他想做的事
- 如果是/否,做一些
- 解锁文件
- 关闭文件
3
具有这样你写的响应的表,你得到他们。然后很容易就可以检查一个特定的响应是否在前100个中 - 只要查看是否在前100行中按相应字段排序。
让MySQL为你做所有的锁定工作!
+0
自动增加PK +检查mysql_insert_id()<= 100是一个聪明而且非常简单的解决方案。 – 2011-02-10 22:45:04
0
你可以有一个BEFORE INSERT
触发,从另一个表Can you access the auto increment value in MySQL within one statement?和abort拉自动增量,如果它是大于100
相关问题
- 1. PHP锁定交易
- 2. neo4j锁定交易
- 3. QueueUserWorkItem是否锁定正确实现?
- 4. 正确实现hashCode()方法
- 5. 轮询锁是否实现关键部分的正确方法?
- 6. GSEventLockDevice无法正确锁定手机
- 7. Talend处理交易的正确方式
- 8. 交易锁定SQL Server 2005
- 9. Rails 3 - 交易和锁定
- 10. 交易和锁定MySQL
- 11. sql lite交易锁定
- 12. 努力正确实现自定义导轨控制器方法
- 13. 交易 - 读锁
- 14. 交易和锁
- 15. 正确锁定方法调用
- 16. 用现有的交易方法换行交易?
- 17. 实现ICloneable的正确方法
- 18. X509TrustManager实现checkServerTrusted的正确方法
- 19. Parcelable实现的正确方法
- 20. 实现loadView的正确方法?
- 21. 实现DAO类的正确方法?
- 22. 用Java实现Mixin的正确方法?
- 23. IDisposable - 正确的方法实现(c#)
- 24. 实现继承的正确方法
- 25. 可以使用同步方法在Java中实现重入锁定机制
- 26. 什么是实现点击对焦相机的正确方法?
- 27. 确实getWritableDatabase()影响交易
- 28. 这是一个自定义锁定机制的好实现吗?
- 29. 基准无锁与锁定数据结构的正确方法
- 30. MySQL的InnoDB的交易+锁定
7.添加代码,这样,如果在步骤3或4的PHP崩溃了,你收拾锁。否则,没有人可以做任何事情。锁是困难的:-) – James 2011-02-10 22:46:26