抢购
- 使用push pop防止物品库存为负数
<?php //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('192.168.56.100', 6379); $redis->auth('root'); echo "Connection to server successfully</br>"; /* 1.先 lpush goods:1 1 操作十次 2.再 lpop goods:1 操作若干次 3.后 lpush order:1 操作多次 */ //用户ID $user_id = time(); $check = $redis->lpop('goods:1'); if(!$check){ exit('抢光了'); } $result = $redis->lpush('order:1',$user_id); if($result){ echo '抢购成功'; }
发布订阅模式
- taskPub.php 任务发布者
<?php $redis = new Redis(); $redis->connect('192.168.56.110',6379); $redis->auth('root'); $task = [ 'task'=>'send_email', 'data'=>'你好,隔壁老王', ]; $redis->publish('task_queue', serialize($task));
- taskWorker.php接收(任务)发布者发送的任务消息
ini_set('default_socket_timeout', -1); //避免在默认的配置下,1分钟后终端了与redis服务器的链接 $redis = new Redis(); $redis->connect('192.168.56.110',6379); $redis->auth('root'); $redis->subscribe(['task_queue'], function($redis,$chan,$msg){ switch ($chan) { case 'task_queue': $task = unserialize($msg); if($task['task']=='send_email'){ // send email } // do other job break; default: break; } });
- 运行脚本
php taskWorker.php
网友评论