php中使用memcached的性能问题
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设置的。大小推荐设置为你的数据的常规大小。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.
