1. 云栖社区>
  2. PHP教程>
  3. 正文

php中使用memcache扩展的性能问题

作者:用户 来源:互联网 时间:2017-12-01 16:31:49

php问题扩展性能memcache使用

php中使用memcache扩展的性能问题 - 摘要: 本文讲的是php中使用memcache扩展的性能问题,            Memcached是一个高性能分布式缓存系统,目前估计是很多公司的标配了,因为他被非常广泛的使用,在各种语言下都有其丰富的client,所以很多后端服务也采用了兼容的memcached协议,比如memcachedb




           Memcached是一个高性能分布式缓存系统,目前估计是很多公司的标配了,因为他被非常广泛的使用,在各种语言下都有其丰富的client,所以很多后端服务也采用了兼容的memcached协议,比如memcachedb, ttserver等等。所以最近我开发的队列服务器也采用了memcached协议,底层是基于磁盘的存储,单独测试底层存储的性能非常好,在我台式机能达到每秒写入3万1K的数据。


          今天用php测试了下往刚刚开发的队列服务器(icqueue)插入数据,代码如下:


 


php中使用memcache扩展的性能问题
<?php$mem=newMemcache();$mem->addServer ("127.0.0.1",12001,false,1,100);$start=microtime(true);$str=str_repeat("a",1024);//1k数据for($i=0;$i<100000;$i++){$mem->add("bbs_password_",$str,0,0);//入队,bbs为队列名称,password为密码}echomicrotime(true)-$start;?>
php中使用memcache扩展的性能问题

 


 


执行:[[email protected] bbs]# /usr/local/php/bin/php mem.php


 5.6957609653473


花了5秒,感觉速度还是挺快,还是单进程跑的。接着我想测试大一点的数据,把其中的


 

$str=str_repeat("a",1024);//1k数据

 


改为

$str=str_repeat("a",1024*10);//10k数据

执行:[[email protected] bbs]# /usr/local/php/bin/php mem.php发现速度非常的慢,等了1分钟也没有成功。怀疑是队列服务(icqueue)有问题,又换成memcached服务器写数据测试,发现速度同样的慢。


这就排除了是服务端的问题。经过调整数据的大小,发现只要达到8K就非常慢。


然后怀疑是不是到了8K memcach自动进行了压缩,是压缩很慢呢。又去telnet进去,发现数据是没有压缩的。


剩下的问题应该就是网络问题了,翻看了memcach扩展的手册,发现其中memcache.chunk_size的大小默认是8K,灵感一现,希望就是这这个问题导致的。


然后又改代码:


 


 


php中使用memcache扩展的性能问题
<?phpini_set('memcache.chunk_size',1024*15);//设置到15K$mem=newMemcache();$mem->addServer ("127.0.0.1",12001,false,1,100);$start=microtime(true);$str=str_repeat("a",1024*10);//10k数据for($i=0;$i<100000;$i++){$mem->add("bbs_password_",$str,0,0);//入队,bbs为队列名称,password为密码}echomicrotime(true)-$start;?>
php中使用memcache扩展的性能问题

 


执行:[[email protected] bbs]# /usr/local/php/bin/php mem.php


 


10.800881147385


跑了10完成,OK,问题解决了。


memcache.chunk_size在php.ini设置的。大小推荐设置为你的数据的常规大小。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 问题 , 扩展 , 性能 , memcache 使用 ,以便于您获取更多的相关知识。