zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    php 函数汇总
    php 图片base64编码生成dataurl和保存为图片
    bootstrap
    PHPWord
    js json排序
    UE用法
    判断移动端是苹果还是安卓,以及安卓版本
    shell终极操作
    LINUX yum用法
    jquery对checkbox的操作汇总
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9975338.html
Copyright © 2011-2022 走看看