php - 如何用Redis解決並發導致資料重複插入MySQL的問題?
淡淡烟草味
淡淡烟草味 2017-05-16 13:01:48
0
4
708

業務場景

有個查詢系統,用戶查詢的時候,如果資料庫沒有數據,就需要呼叫第三方查詢介面取得數據,然後把數據插入到資料庫,再從資料庫查出資料回傳給使用者。 【系統基於PHP開發】

問題描述

如果多個使用者查詢的時候,就會存在多個請求同時去第三方介面查詢,就出現了資料重複插入的問題了。

請問這種問題要如何解決呢?
是呼叫第三方介面的時候,用Redis來確保只有一個請求到第三方,從而避免資料的重複查詢和插入,還是有其他什麼好的方法呢?具體怎麼實現呢?
謝謝!

淡淡烟草味
淡淡烟草味

全部回覆(4)
伊谢尔伦

加鎖機制。代碼進入操作前檢查操作是否上鎖,如果鎖上,中斷操作。否則進行下一操作,第一步將操作上鎖,然後執行程式碼,最後執行完程式碼別忘將操作鎖開啟。不然你下去執行就沒有辦法進行了。

上鎖代碼非常多,樓上給的就是其中一種。 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 {
    #上锁后的操作
}
为情所困

雷雷

小葫芦

雷雷

迷茫

樓主說的redis"鎖"當然可行
另外,查詢出來的資料是否可以設定唯一ID?這樣就是雙重驗證了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板