redis+php+mysql處理高並發實例


一、實驗環境
ubuntu、php、apache或nginx、mysql
二、利用Redis鎖解決高並發問題,需求
現在有一個接口可能會出現並發量比較大的情況,這個接口使用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中。

原文地址:https://segmentfault.com/a/1190000015894627


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM