search
Homephp教程php手册php中使用memcached的性能问题

php中使用memcached的性能问题

Jun 06, 2016 pm 07:46 PM
memcachedphpuseperformancequestion

php中使用memcache扩展的性能问题 [文章作者:孙立 链接:http://www.cnblogs.com/sunli/更新时间:2010-08-28] Memcached是一个高性能分布式缓存系统,目前估计是很多公司的标配了,因为他被非常广泛的使用,在各种语言下都有其丰富的client,所以很多后端服

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

 [文章作者:孙立 链接:http://www.cnblogs.com/sunli/ 更新时间:2010-08-28]

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

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

 

<p><span></span><span>php<br></span><span>$mem</span><span>=</span><span>new</span><span> Memcache();<br></span><span>$mem</span><span>-></span><span>addServer (</span><span>"</span><span>127.0.0.1</span><span>"</span><span>,</span><span>12001</span><span>,</span><span>false</span><span>,</span><span>1</span><span>,</span><span>100</span><span>);<br></span><span>$start</span><span>=</span><span>microtime</span><span>(</span><span>true</span><span>);<br></span><span>$str</span><span>=</span><span>str_repeat</span><span> (</span><span>"</span><span>a</span><span>"</span><span>,</span><span>1024</span><span>);</span><span>//</span><span>1k数据</span><span><br></span><span>for</span><span>(</span><span>$i</span><span>=</span><span>0</span><span>;</span><span>$i</span><span><span>100000</span><span>;</span><span>$i</span><span>++</span><span>){<br>   </span><span>$mem</span><span>-></span><span>add(</span><span>"</span><span>bbs_password_</span><span>"</span><span>,</span><span>$str</span><span>,</span><span>0</span><span>,</span><span>0</span><span>);</span><span>//</span><span>入队,bbs为队列名称,password为密码</span><span><br></span><span>}<br></span><span>echo</span><span>microtime</span><span>(</span><span>true</span><span>)</span><span>-</span><span>$start</span><span>;<br> </span><span>?></span></span></p>

 

 

执行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.php

 5.6957609653473

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

 

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

 

改为

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

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

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

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

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

然后又改代码:

 

 

<p><span></span><span>php<br></span><span>ini_set</span><span>(</span><span>'</span><span>memcache.chunk_size</span><span>'</span><span>,</span><span>1024</span><span>*</span><span>15</span><span>);</span><span>//</span><span>设置到15K</span><span><br></span><span>$mem</span><span>=</span><span>new</span><span> Memcache();<br></span><span>$mem</span><span>-></span><span>addServer (</span><span>"</span><span>127.0.0.1</span><span>"</span><span>,</span><span>12001</span><span>,</span><span>false</span><span>,</span><span>1</span><span>,</span><span>100</span><span>);<br></span><span>$start</span><span>=</span><span>microtime</span><span>(</span><span>true</span><span>);<br></span><span>$str</span><span>=</span><span>str_repeat</span><span> (</span><span>"</span><span>a</span><span>"</span><span>,</span><span>1024</span><span>*</span><span>10</span><span>);</span><span>//</span><span>10k数据</span><span><br></span><span>for</span><span>(</span><span>$i</span><span>=</span><span>0</span><span>;</span><span>$i</span><span><span>100000</span><span>;</span><span>$i</span><span>++</span><span>){<br>   </span><span>$mem</span><span>-></span><span>add(</span><span>"</span><span>bbs_password_</span><span>"</span><span>,</span><span>$str</span><span>,</span><span>0</span><span>,</span><span>0</span><span>);</span><span>//</span><span>入队,bbs为队列名称,password为密码</span><span><br></span><span>}<br></span><span>echo</span><span>microtime</span><span>(</span><span>true</span><span>)</span><span>-</span><span>$start</span><span>;<br> </span><span>?></span></span></p>

 

执行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.php

 

10.800881147385

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

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

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment