本篇文章給大家帶來的內容是關於php+redis+mysq如何l處理高並發(執行個體代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。
一、實驗環境
ubuntu、php、apache或nginx、mysql
二、需求
現在有一個介面可能會出現並發量比較大的情況,這個介面使用php寫的,做的功能是接收 使用者的GET請求中的name欄位,然後將這個欄位存到mysql中,現在先將資料放到redis的隊列中,然後讓redis定時將這些資料轉移到mysql中。
二、實現步驟
1.建立資料庫test及 資料表test,建表語句如下
CREATE TABLE `test` ( `name` varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf-8
1.在/var/www/test中建立index.php,內容如下,並配置虛擬機器主機使其可訪問到。
<?php$redis = new Redis();$redis->connect('127.0.0.1', 6379);try { $res = $redis->LPUSH('name', $_REQUEST["name"]);} catch (Exception $e) { echo $e->getMessage();}
2.在相同的目錄下建立redis.php檔案,注意修改其中的資料庫密碼等配置,內容如下
<?php$redis = new Redis();$redis->pconnect('127.0.0.1',6379);$mysql=mysqli_connect("localhost","root","bnm");mysqli_select_db($mysql,"test") or die("不能選擇資料庫");if(!$mysql){ die("串連失敗");}while (true){ try{ $value = $redis->LPOP('name'); if(!$value){ echo "等待"; }else{ $sql="insert into test(name) values ('".$value."')"; $result=mysqli_query($mysql,$sql); if($result&&mysqli_affected_rows($mysql)>0){ echo "插入成功"; }else{ echo "插入失敗:".mysqli_error($mysql); } } }catch(Exception $e){ echo $e->getMessage(); } sleep(1);}
3.運行redis.php指令檔
nohup php redis.php &
4.訪問index.php指令檔,如:http://192.168.116.128/?name=33,然後查看資料是否已經到mysql中。
相關文章推薦:
php數組函數有哪些操作?php數組函數的應用(附代碼)
thinkphp5架構與Android實現二維碼的產生代碼