redis中list模拟案例-消息队列
Posted ~灵动奇迹~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis中list模拟案例-消息队列相关的知识,希望对你有一定的参考价值。
redis 数据类型:字符串string、list、set、zset、hash
主要的是list消息队列
消息队列的概念:先进先出
<?php
//echo phpinfo();
ini_set(‘display_errors‘,‘On‘);
error_reporting(E_ALL);
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect(‘127.0.0.1‘, 6379);
print_r($redis);
echo "<br/>Connection to server sucessfully<br/>";
//查看服务是否运行
echo "Server is running: " . $redis->ping();
echo ‘<hr/>‘;
//list 消息队列
/*echo $redis->llen(‘name‘);
echo $redis->lpop(‘name‘);
echo $redis->llen(‘name‘);*/
//高压力情况,不能高压力情况
for($i=0;$i<20;$i++){
$uid = rand(100,3000);
$redis_name = ‘miaosha‘;
//$uid = $_GET[‘uid‘];
$num = 10;
if($redis->llen($redis_name)<10){
$redis->rpush($redis_name,$uid.‘%‘.microtime());
echo $uid.‘秒杀成功<br/>‘;
}else{
echo ‘秒杀失败‘;
}
}
$redis->close();
?>
<?php
ini_set(‘display_errors‘,‘On‘);
error_reporting(E_ALL);
//连接本地的 Redis 服务
$redis = new Redis();
$redis->connect(‘127.0.0.1‘, 6379);
ini_set("max_execution_time", 100);
//$db = DB::getLntance();
$redis_name = ‘miaosha‘;
//死循环
$i=0;
while($i<15){
$i++;
//从队列最左侧取出一个值来,然后判断这个值是否存在
$user = $redis->lpop($redis_name);
//var_dump($user);exit;
if(!$user || $user==‘nil‘){
sleep(2);
continue;
}
//切割出时间,uid,保存数据库中
$user_arr = explode(‘%‘,$user);
$arr = [
‘uid‘ => $user_arr[0],
‘time_stamp‘ => $user_arr[1]
];
$_user[] = $arr;
//数据库插入的失败的时候回滚机制
if(!$_user){
$redis->rpush($redis_name,$user);
}
sleep(2);
}
var_dump($_user);
//释放redis
$redis->close();
?>
以上是关于redis中list模拟案例-消息队列的主要内容,如果未能解决你的问题,请参考以下文章