數(shù)據(jù)重復(fù)添加&鎖

需求:

H5小游戲使用微信公眾號進行網(wǎng)頁授權(quán)登錄,同一個用戶的openid只允許有一條記錄

問題描述

  • 查詢數(shù)據(jù)庫是此openid否存在
  • 不存在則去微信獲取用戶信息
  • 如果獲取成功,則直接新建一個用戶

按照這個樣的流程,當同一個用戶并發(fā)的請求時,由于從查詢到新建,中間間隔了去微信服務(wù)器查詢的時間,導(dǎo)致新建的那個時刻,數(shù)據(jù)庫有可能已經(jīng)創(chuàng)建了一條數(shù)據(jù)。

解決方案

  • 查詢數(shù)據(jù)庫是此openid否存在
  • 如果不存在,則直接新建一個用戶, 并使用memcache加鎖, memcache加鎖的代碼如下
$memcacke_key = 'new_user_oid_'.$openid;
if(!$user_info=User::model()->find('openid=:t_o', array(':t_o', array(':t_o'=>$openid))) {
  if(!Yii::app()->memcache->get($memcacke_key)) {
    Yii::app()->memcache->set($memcacke_key, 1, 60);
    $user_info = new User;
    ...
    $user_info->save();    //保存進數(shù)據(jù)庫
  }
}
  • 不存在則去微信獲取用戶信息, 并更新用戶的數(shù)據(jù)(昵稱、頭像等)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容