关于秒杀系统
在学习过程中,经常遇到关于秒杀系统的文章,但查阅各种资料,总觉得没一篇文章能完整的讲解秒杀系统是如何实现的。
秒杀功能常见,但完整的秒杀系统却不是那么经常用到 ,一套完整的秒杀系统涉及到 负载均衡、CDN、分布式、服务集群 等方面的知识。
秒杀功能代码的简单实现:
秒杀功能的实现,其实不外乎 3 种方式:
1. 单进程 ( 用户量大时,体验不友好),
2. 锁 ( 用户量大时,并发,容易产生不可预期的问题 如: 死锁等),
3. 队列 ( 相对推荐 )
Redis 队列的简单实现
$ttl = 4;
$random = mt_rand(1,1000).'-'.gettimeofday(true).'-'.mt_rand(1,1000);
$lock = fasle;
while (!$lock) {
$lock = $redis->set('lock', $random, array('nx', 'ex' => $ttl));
}
if ($redis->get('goods.num') <= 0) {
echo ("秒杀已经结束");
//删除锁
if ($redis->get('lock') == $random) {
$redis->del('lock');
}
return false;
}
$redis->decr('goods.num');
echo ("秒杀成功");
//删除锁
if ($redis->get('lock') == $random) {
$redis->del('lock');
}
return true;