コード例 #1
0
 /**
  * 同步redis到数据库
  */
 function actionSync()
 {
     $db = DatabaseFactory::open();
     $redis = GiftBagService::getRedis();
     // 同步步长
     $syncStep = 1000;
     $syncTotal = 0;
     // 遍历所有campaign,获取新领取的userId
     $campaigns = $db->createCommand('SELECT id FROM g_campaign')->findAll();
     if ($campaigns) {
         foreach ($campaigns as $campaign) {
             $campaignId = $campaign['id'];
             $redis->connect($campaignId);
             $keyReceiveAdd = sprintf(GiftBagService::$REDIS_KEYS['receiveAdd'], $campaignId);
             $total = $redis->scard($keyReceiveAdd)->getResult();
             if ($total <= 0) {
                 continue;
             }
             // 同步新领取的用户关系到db
             for ($i = $total; $i > 0; $i -= $syncStep) {
                 // 按步长批量获取userId和giftbagCode
                 $redis->connect($campaignId)->multi();
                 for ($j = min($i, $syncStep); $j > 0; --$j) {
                     $redis->spop($keyReceiveAdd);
                 }
                 $result = $redis->exec()->getResult();
                 foreach ($result as $item) {
                     list($userId, $code) = $item;
                     ++$syncTotal;
                     $this->insertMapping($campaignId, $userId, $code);
                 }
             }
         }
         $this->insertMappingFlush();
     }
     echo "Success Synchronized {$syncTotal} mapping records\n";
 }
コード例 #2
0
 /**
  * 测试领取兑换码
  */
 function actionTest()
 {
     $campaignId = (int) $_GET['campaignId'];
     $userId = (int) $_GET['userId'];
     /* 用户已领取 */
     if (GiftBagService::receivedTotal($campaignId, $userId) > 0) {
         exit('received');
     }
     $giftbagCode = GiftBagService::receive($campaignId, $userId);
     if (empty($giftbagCode)) {
         exit('no');
     } else {
         // 记住领取的礼包
         GiftBagService::rememberReceive($campaignId, $userId, $giftbagCode);
         exit('ok');
     }
 }