在我们开发中有好多并发的场景,如:抢购、抢票、抢红包等。那么用mysql来做可能不是太好,也可能存在锁表的情况。那么消息队列就出来了。
具体消息队列的概念我就不说了,想必看能看到这篇文章的朋友已经对消息队列有了一定的了解了。那么下来我们就开始了。
1.安装php的redis扩展
wget https://github.com/phpredis/phpredis/archive/3.1.4.tar.gz
tar -zxvf 3.1.4.tar.gz
cd phpredis-3.1.4
phpize
./configure --with-php-config=/Applications/MAMP/bin/php/php7.1.6/bin/php-config (这里我用的是mamp,具体的根据自己的环境链接php-config)
2.将请求数据通过php存入redis
$user_id = $argv[1]; //模拟用户id
// 将请求存入redis
$redis = new Redis();
// 创建链接
$redis->connect('127.0.0.1', 6379);
// 开始存入
try{
$redis->lPush('click', $user_id);
}catch(Exception $e){
echo $e->getMessage();
}
echo "用户id已经存入消息队列\n";
3.写一个php处理消息队列中的数据到mysql的守护进程
$redis = new Redis();
$redis->pconnect('127.0.0.1',6379);
while(1) {
try{
$value = $redis->LPOP('click');
/**
*可以进行一些逻辑处理,数据库数据的写入等(如果用innodb的话可以进行mysql事务处理)
*/
}
catch(Exception $e) {
echo $e->getMessage();
}
}