搜尋

首頁  >  問答  >  主體

php - 如何用Redis解決並發導致資料重複插入MySQL的問題?

業務場景

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

問題描述

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

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

淡淡烟草味淡淡烟草味2785 天前723

全部回覆(4)我來回復

  • 伊谢尔伦

    伊谢尔伦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 {
        #上锁后的操作
    }

    回覆
    0
  • 为情所困

    为情所困2017-05-16 13:03:48

    雷雷

    回覆
    0
  • 高洛峰

    高洛峰2017-05-16 13:03:48

    雷雷

    回覆
    0
  • 迷茫

    迷茫2017-05-16 13:03:48

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

    回覆
    0
  • 取消回覆