Представил
Всем должно быть известно, что запросы на доступ резко возрастут в течение короткого периода времени, при этом, гарантируя, что данные не будут перепроданы и точны, все еще существуют некоторые технические проблемы. К сожалению, шансов на реализацию в проекте не было. Прочитав еще немного информации, я планирую поэкспериментировать. Следующий код используется только для Тестирования Среда относительно проста. Пожалуйста, измените его в соответствии с реальной ситуацией.
Создайте вторую очередь убийств
Перед началом второго убийства поставьте товар в очередь следующим образом
/** * Create a second kill list */ public function createList() { $count = 30; $redisKey = 'goods_list'; for ($i = 1; $i <= $count; $i++) { // Test to prevent data errors if (Redis::llen($redisKey) >= $count) { break; } Redis::rpush($redisKey, $i); } }
После выполнения, посмотрите на это красным цветом
Существует 30 товарных идентификаторов с обычными данными.
Шип
Следующим ключевым шагом является использование Redis lpop
Команда получает идентификатор товара, используя атомарность Redis.
/** * spike */ public function buy() { // Random username, meaningless, tagged only $username = Hash::make(now()); if ($goodsId = Redis::lpop('goods_list')) { // Successful Purchase Redis::hset('buy_success', $goodsId, $username); } else { // Failure to buy Redis::incr('buy_fail'); } }
Как упоминалось выше, код упрощен. После покупки успех только фиксируется. В практическом применении, конечно, это будет сложнее, но следует отметить, что Mysql не работает синхронно. Еще одно слово, Хэш:сделать(сейчас())
Даже если значения будут одинаковыми, одни и те же данные не будут сгенерированы, см. Здесь.
тест
Наконец, протестируйте его, используйте тест b, выполните его. abc 300 -n 3000 http://localhost/buy/
Вышеуказанный заказ означает 300 одновременных запросов в течение 3000 раз
Выполнение было не быстрым, и 794 обращения завершились неудачно. Давайте посмотрим, верны ли эти данные. Печать на странице buy_success
значение
Тридцать победителей. Посмотрите на количество неудачных попыток второго убийства
Не точное число, 2165 + 30-это количество успешных запросов, плюс 794 сбоя, всего 2989, все еще меньше 3000.
эпилог
Вышеуказанные тесты имеют некоторые недостатки, такие как низкая скорость отклика, сбой запроса и неточное количество сбоев. Похоже, предстоит многое оптимизировать, не только на уровне кода. Это должно иметь какой-то эффект, чтобы забыть отключить запись доступа при тестировании. Хорошо то, что количество вторых убийств точно и не перепродано.
Ссылка: Redis реализует высокий параллелизм оснастки, функции второго убийства, дизайнерские идеи облачной собственной системы второго убийства, дизайн архитектуры второго убийства