有個查詢系統,用戶查詢的時候,如果資料庫沒有數據,就需要呼叫第三方查詢介面取得數據,然後把數據插入到資料庫,再從資料庫查出資料回傳給使用者。 【系統基於PHP開發】
如果多個使用者查詢的時候,就會存在多個請求同時去第三方介面查詢,就出現了資料重複插入的問題了。
請問這種問題要如何解決呢?
是呼叫第三方介面的時候,用Redis
來確保只有一個請求到第三方,從而避免資料的重複查詢和插入,還是有其他什麼好的方法呢?具體怎麼實現呢?
謝謝!
伊谢尔伦2017-05-16 13:03:48
加鎖機制。代碼進入操作前檢查操作是否上鎖,如果鎖上,中斷操作。否則進行下一操作,第一步將操作上鎖,然後執行程式碼,最後執行完程式碼別忘將操作鎖開啟。不然你下去執行就沒有辦法進行了。
上鎖代碼非常多,樓上給的就是其中一種。 redismemcachecache檔案都可以,如果操作比較高的話,建議用樓上這種用redis。 (其實就是使用string資料型,給鎖key賦個值{加鎖},開鎖就將這個key的值清空或或賦0值 )
$lock_status = $redis->get('lock_state');
if ($lock_status == 0 || empty($lock_status)) {
$redis->set('lock_state', 3600, 1); #操作上锁
#操作代码
$redis->set('lock_state', 3600, 0); #操作解锁
} else {
#上锁后的操作
}