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模擬案例-消息隊列