首页 > 数据库 > Redis > 正文

REDIS+PHP的并发连接数过低

2020-03-17 12:43:50
字体:大 中 小
来源:转载
供稿:网友

目前碰到一个棘手的问题,用REDIS来做缓存的时候,发现在并发情况下,REDIS 对于短连接的处理能力很差。

测试环境:CENTOS 6.2 PHP 5.4 PHPREDIS2.0插件 nginx/1.1.16

DELL 2950 八核八G REDIS 的并发数的配置文件部分已经注释掉了。硬盘保存功能也关闭了。

内网同样配置的机器用webbench 发起攻击,并发调用同样的PHP

  1. $sUserID = 'abcasdasda'; 
  2.  
  3. $sKey = 'ProvinceName'; 
  4.  
  5. $redis = new Redis(); 
  6.  
  7. $nError = $redis->connect('127.0.0.1', 6379); 
  8.  
  9. if ($nError != 1) 
  10.  
  11. echo -9998; 
  12.  
  13. $b = $redis->hget($sUserID, $sKey); 
  14.  
  15. if(emptyempty($b)) 
  16.  
  17. echo -9999; 
  18.  
  19. else 
  20.  
  21. $redis->incr('newCount'); 
  22.  
  23. $redis->close(); 

在浏览器中测试成功后,运行一次PHP 。newcount 加一。

运行webbench 经过N轮各种参数的测试,每秒newcount 只能增加470个左右。

同样环境下运行插入MYSQL 的PHP

  1. $con = mysql_connect("localhost","root","abc123"); 
  2.  
  3. if (!$con) { 
  4.  
  5. die('Could not connect: ' . mysql_error()); 
  6.  
  7. echo -9999;//...... 
  8.  
  9. return -9999; 
  10.  
  11. } 
  12.  
  13. else { 
  14.  
  15. mysql_select_db("test", $con); 
  16.  
  17. if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])) 
  18.  
  19. { 
  20.  
  21. $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
  22.  
  23. } 
  24.  
  25. elseif (isset($_SERVER["HTTP_CLIENT_IP"])) 
  26.  
  27. { 
  28.  
  29. $realip = $_SERVER["HTTP_CLIENT_IP"]; 
  30.  
  31. } 
  32.  
  33. else 
  34.  
  35. { 
  36.  
  37. $realip = $_SERVER["REMOTE_ADDR"]; 
  38.  
  39. } 
  40.  
  41. $URL=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
  42.  
  43. $query="Insert into url_log (time,url,u_return,client_ip) values ( now(), '".$URL."', '".$strReturn."','".$realip."')"; 
  44.  
  45. if(mysql_query($query)) 
  46.  
  47. { 
  48.  
  49. echo "DB Insert OK";//...... 
  50.  
  51. } 
  52.  
  53. else 
  54.  
  55. { 
  56.  
  57. echo "DB Insert Error";//...... 
  58.  
  59. } 
  60.  
  61. } 
  62.  
  63. mysql_close($con); 
  64.  
  65. ?> 

每秒插入的记录数,稳定在2000以上,远远比REDIS 要完成的操作多。

想请问大家,如何能提高REDIS 的并发能力,我们的应用场景是短链接为主,每个链接处理的问题都比较少。

希望能利用REDIS 作为内存数据库 实时高速读写 。

希望高人给出建议 谢谢!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表