当前位置:   article > 正文

PHP使用redis实现电商秒杀功能

PHP使用redis实现电商秒杀功能

电商的秒杀功能是现在电商系统的主流功能;

参加过电商秒杀的都知道,有时候会遇到商品明显没有了,用户还可以下单导致秒杀商品的库存时常为负数。

秒杀系统就是典型的、短时间的、大量的、突发访问;这样的短时大并发的系统,在性能负载上面有一个很明显的波峰和长期波谷。是为了应对相当短时间内的大并发而准备大量服务器来应对,在经济上是非常不划算的。因此呢,对付秒杀类的需求,我们就应该化同步为异步,用户请求写入内存后立刻返回。后台启动多个线程从内存池中异步读取数据,对其进行处理。

PHP使用redis实现电商秒杀功能
异步处理,通常用MQ(消息队列)来实现。redis可以看作是一个高性能的MQ。因为它的数据读写都发生在内存之中。写入内存,而不是写入硬盘。redis是一个缓存系统,数据写入内存后就返回给客户端,能够支持这个特性;所以使用redis就可以轻松实现一个强大的秒杀系统。

例如:

<?Php			 
	//php秒杀 redis并发处理 			
	function miaoshao(){
		$redis = new Redis;
        //diy redis操作类
        //连接 
        $redis->connect('127.0.0.1', 6379,30); 
        //设置密码 
        $redis->auth('junyi');
		//获取库存出售的数量,默认为空 				
		$kuchun = $redis -> get('kucun');
		$total = 100;
 		if ($kuchun < $total){
			//有库存
			$redis -> watch('kucun');
			//开启事务
			$redis->multi();
			$redis->set("kucun",$kuchun+1);
			//执行事务 						
			$result = $redis->exec();
			if($result){
				//剩余数量 					
				$number = $total - ($kuchun +1);
				//$openid 用户id 
				$openid = $number;
				$redis-> hset("list","user_".$openid,$kuchun);
				//获取抢购成功的用户 					
				$data = $redis-> hgetall('list');
				var_dump($data);
				var_dump($number);
			}else{
				var_dump('手气很差哦,再试一下!');
				}			
		 }else{
 			var_dump('已经被抢光了');
		 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

这样以来就能使用reids实现电商秒杀系统了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/224833
推荐阅读
相关标签
  

闽ICP备14008679号