PHP 设计一个秒杀系统?

答案

  1. <?php
  2. $redis = new Redis();
  3. $ttl = 4;
  4. $random = mt_rand(1, 1000) . '-' . gettimeofday(true) . '-' . mt_rand(1, 1000);
  5. $lock = false;
  6. // 循环获取锁,成功则继续往下,不成功则继续循环
  7. while (!$lock) {
  8. $lock = $redis->set('lock', $random, array('nx', 'ex' => $ttl));
  9. }
  10. if ($redis->get('goods.num') <= 0) {
  11. echo "秒杀已经结束";
  12. // 删除锁
  13. if ($redis->get('lock') == $random) {
  14. $redis->del('lock');
  15. }
  16. return false;
  17. }
  18. $redis->decr('goods.num');
  19. echo '秒杀成功';
  20. // 删除锁
  21. if ($redis->get('lock') == $random) {
  22. $redis->del('lock');
  23. }
  24. return true;