Я использую метод удачного розыгрыша, тогда как пользователи могут получить удачный розыгрыш только тогда, когда количество попыток достигнет определенных чисел. каждый раз пользователь пытается разыграть удачу. Я создал для этого простой способ.
public function canGetLuckyDraw()
{
$gifts = Gift::count();
Gift::create([
'user_id' => auth()->id,
'status' => false
]);
if($gifts % 300 == 0)
{
$this->userGetTheLuckyDraw();
}
}
Когда текущий пользователь делает 300 попыток. Тогда пользователь получит счастливый розыгрыш. Проблема в том, что я обнаружил, что если оба пользователя обращаются к методу canGetLuckyDraw () одновременно. Есть шанс, что количество подарков в таблице подарков будет таким же, и два или более пользователя получат счастливый розыгрыш.
Кто-нибудь знает, как лучше всего справиться с такой ситуацией? Я использовал очередь, но она довольно медленная, так как я вынужден использовать только 1 воркера, чтобы справиться с этим, чтобы счетчик был уникальным.