美文网首页
数据重复添加&锁

数据重复添加&锁

作者: yeqingwen | 来源:发表于2017-02-24 17:27 被阅读0次

    需求:

    H5小游戏使用微信公众号进行网页授权登录,同一个用户的openid只允许有一条记录

    问题描述

    • 查询数据库是此openid否存在
    • 不存在则去微信获取用户信息
    • 如果获取成功,则直接新建一个用户

    按照这个样的流程,当同一个用户并发的请求时,由于从查询到新建,中间间隔了去微信服务器查询的时间,导致新建的那个时刻,数据库有可能已经创建了一条数据。

    解决方案

    • 查询数据库是此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();    //保存进数据库
      }
    }
    
    • 不存在则去微信获取用户信息, 并更新用户的数据(昵称、头像等)

    相关文章

      网友评论

          本文标题:数据重复添加&锁

          本文链接:https://www.haomeiwen.com/subject/jklobttx.html