有個查詢系統,用戶查詢的時候,如果資料庫沒有數據,就需要呼叫第三方查詢介面取得數據,然後把數據插入到資料庫,再從資料庫查出資料回傳給使用者。 【系統基於PHP開發】
如果多個使用者查詢的時候,就會存在多個請求同時去第三方介面查詢,就出現了資料重複插入的問題了。
請問這種問題要如何解決呢? 是呼叫第三方介面的時候,用Redis來確保只有一個請求到第三方,從而避免資料的重複查詢和插入,還是有其他什麼好的方法呢?具體怎麼實現呢? 謝謝!
Redis
加鎖機制。代碼進入操作前檢查操作是否上鎖,如果鎖上,中斷操作。否則進行下一操作,第一步將操作上鎖,然後執行程式碼,最後執行完程式碼別忘將操作鎖開啟。不然你下去執行就沒有辦法進行了。
上鎖代碼非常多,樓上給的就是其中一種。 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?這樣就是雙重驗證了
加鎖機制。代碼進入操作前檢查操作是否上鎖,如果鎖上,中斷操作。否則進行下一操作,第一步將操作上鎖,然後執行程式碼,最後執行完程式碼別忘將操作鎖開啟。不然你下去執行就沒有辦法進行了。
上鎖代碼非常多,樓上給的就是其中一種。 redismemcachecache檔案都可以,如果操作比較高的話,建議用樓上這種用redis。 (其實就是使用string資料型,給鎖key賦個值{加鎖},開鎖就將這個key的值清空或或賦0值 )
雷雷
雷雷
樓主說的redis"鎖"當然可行
另外,查詢出來的資料是否可以設定唯一ID?這樣就是雙重驗證了