当前位置:源码库-建站教程-数据库教程-Redis-REDIS+PHP的并发连接数过低

REDIS+PHP的并发连接数过低

时间:2014-12-05来源:www.aspku.com 作者:源码库 文章热度:

目前碰到一个棘手的问题,用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. else { 
  13.  
  14. mysql_select_db("test"$con); 
  15.  
  16. if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])) 
  17.  
  18.  
  19. $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
  20.  
  21.  
  22. elseif (isset($_SERVER["HTTP_CLIENT_IP"])) 
  23.  
  24.  
  25. $realip = $_SERVER["HTTP_CLIENT_IP"]; 
  26.  
  27.  
  28. else 
  29.  
  30.  
  31. $realip = $_SERVER["REMOTE_ADDR"]; 
  32.  
  33.  
  34. $URL=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
  35.  
  36. $query="Insert into url_log (time,url,u_return,client_ip) values ( now(), '".$URL."', '".$strReturn."','".$realip."')"
  37.  
  38. if(mysql_query($query)) 
  39.  
  40.  
  41. echo "DB Insert OK";//...... 
  42.  
  43.  
  44. else 
  45.  
  46.  
  47. echo "DB Insert Error";//...... 
  48.  
  49.  
  50.  
  51. mysql_close($con); 
  52.  
  53. ?> 

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

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

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

希望高人给出建议 谢谢!

相关Redis
相关资源下载