使用redis乐观锁实现秒杀

该博客介绍如何使用Redis的乐观锁机制来实施秒杀功能。通过连接Redis服务器,进行 incr 操作记录页面访问次数,使用 watch、multi、exec 命令确保在并发环境下安全地减少商品库存并添加抢购成功的用户ID到列表中。当商品剩余数量为0时,停止抢购操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



  1. <?php
  2. header('content-type:text/html;charset=utf-8');  
  3. $redis = new Redis();  
  4. $result = $redis->open('192.168.1.236', 6379 , 5 );  
  5. $redis -> auth('likang');  
  6. //var_dump($redis -> set( 'b' , 123 ));  
  7. //  
  8. //var_dump( $redis -> get('b') );  
  9. //  
  10. //var_dump( $result );exit;  
  11. //echo "<pre>";  
  12. echo "页面被访问了" . $redis->incr('ci'). '<br>';  
  13. echo '总共抢到了' . $redis->lLen('s_kill') . '<br>';  
  14. echo '剩余数量' . $redis->get('s_kill_number'). '<br>';  
  15.   
  16.   
  17. $redis ->  watch('s_kill_number');  
  18.   
  19. $num_ber = $redis -> get('s_kill_number');  
  20.   
  21.   
  22. $redis -> multi();  
  23.   
  24. //print_r( $redis->lGetRange('s_kill',0 , $redis ->lLen('s_kill')));  
  25. //var_dump($num_ber);exit;  
  26.   
  27. if ( $num_ber > 0) {  
  28.     $redis->decr('s_kill_number');  
  29.     $redis->lPush('s_kill', rand(1000, 9999));  
  30.     $redis -> exec();  
  31.     exit('OK''<br>');  
  32. else {  
  33.     $redis -> exec();  
  34.     exit('抢光了''<br>');  
  35. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值