例如,假設您向幾千名訂戶發送了簡訊,並且您宣傳「點擊此鏈接的前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