/** * 同步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"; }
/** * 测试领取兑换码 */ 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'); } }