|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2007-11-29 23:08 UTC] jjwang at tudou dot com
Description:
------------
I wrote a test script fro memcache-3.0.0, but it seems not work correctly.
when set memcache.protocol to 'ascii', the output is:
ok: set, key-key_nmbccbbn
error: host-192.168.1.250 tcp_port-11211 udp_port-11200 error-Malformed VALUE header errnum-0
error: get, key-key_nmbccbbn
error: prepend, key-key_nmbccbbn
error: append, key-key_nmbccbbn
ok: now value is
error: cas, key-key_nmbccbbn
ok: now value is
error: increment, key-key_nmbccbbn
error: decrement, key-key_nmbccbbn
ok: now value is
error: delete, key-key_nmbccbbn
when set memcache.protocol to 'binary', the output is:
error: host-192.168.1.250 tcp_port-11211 udp_port-11200 error-Network timeout errnum-0
error: set, key-key_ukdfwrwe
error: get, key-key_ukdfwrwe
error: prepend, key-key_ukdfwrwe
error: append, key-key_ukdfwrwe
ok: now value is
error: cas, key-key_ukdfwrwe
ok: now value is
error: increment, key-key_ukdfwrwe
error: decrement, key-key_ukdfwrwe
ok: now value is
error: delete, key-key_ukdfwrwe
it seems that only set is succeed by 'ascii' protocol.
Reproduce code:
---------------
<?php
function getRandomString($prefix = '', $length = 8)
{
$string = $prefix;
for ($i = 0; $i < $length; $i++) {
$string .= chr(rand(97, 122));
}
return $string;
}
function failureCallback($host, $tcpPort, $udpPort, $error, $errnum)
{
echo "error: host-$host tcp_port-$tcpPort udp_port-$udpPort error-$error errnum-$errnum<br />\n";
}
function testMemcache($memcache)
{
$key = getRandomString('key_');
$value = getRandomString('value_');
if (!$memcache->set($key, $value, 0, 60)) {
echo "error: set, key-$key" . "<br />\n";
} else {
echo "ok: set, key-$key" . "<br />\n";
}
if (!($value = $memcache->get($key, $flags, $cas))) {
echo "error: get, key-$key" . "<br />\n";
} else {
echo "ok: get, key-$key value-$value flags-$flags cas-$cas" . "<br />\n";
}
if (!$memcache->prepend($key, 'begin_')) {
echo "error: prepend, key-$key" . "<br />\n";
} else {
echo "ok: prepend, key-$key" . "<br />\n";
}
if (!$memcache->append($key, '_end')) {
echo "error: append, key-$key" . "<br />\n";
} else {
echo "ok: append, key-$key" . "<br />\n";
}
echo "ok: now value is " . $memcache->get($key) . "<br />\n";
$value = getRandomString('value_');
if (!$memcache->cas($key, $value, 0, 0, $cas)) {
echo "error: cas, key-$key" . "<br />\n";
} else {
echo "ok: cas, key-$key value-$value cas-$cas" . "<br />\n";
}
echo "ok: now value is " . $memcache->get($key) . "<br />\n";
$memcache->set($key, 7, 0, 60);
if (!$memcache->increment($key)) {
echo "error: increment, key-$key" . "<br />\n";
} else {
echo "ok: increment, key-$key" . "<br />\n";
}
if (!$memcache->decrement($key, 9)) {
echo "error: decrement, key-$key" . "<br />\n";
} else {
echo "ok: decrement, key-$key" . "<br />\n";
}
echo "ok: now value is " . $memcache->get($key) . "<br />\n";
if (!$memcache->delete($key)) {
echo "error: delete, key-$key" . "<br />\n";
} else {
echo "ok: delete, key-$key" . "<br />\n";
}
}
ini_set('memcache.protocol', 'binary');
$memcache = new MemcachePool();
$memcache->addServer('192.168.1.250', 11211, 11200);
$memcache->setFailureCallback('failureCallback');
testMemcache($memcache);
?>
Expected result:
----------------
I need UDP interface of memcache, but I found no message in README. How can I choose to use 'TCP' or 'UDP'?
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 04:00:01 2025 UTC |
Another problem:) When $loops=100, the fallowing code consumes 3s, but when set $loops to 1000, the program do not finish in several minutes, and there is a lot tcp connection at TIME_WAIT stat in client machine(192.168.1.99), server(10.5.22.51) side is ok. $start = time(); for ($i = 0; $i < $loops; $i++) { $memcacheTCPShort->connect('10.5.22.51', 11211, 0, false); if (!$memcacheTCPShort->get($key)) { echo "error: get by tcp, key-$key" . "<br />\n"; } $memcacheTCPShort->close(); } $end = time(); echo "ok: get by tcp short consumes " . ($end - $start) . "seconds<br />\n"; output of 'netstat -nt | grep 11211' at client side: tcp 0 0 192.168.1.99:44389 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44388 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44391 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44390 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44385 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44384 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44387 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44386 10.5.22.51:11211 TIME_WAIT tcp 0 0 192.168.1.99:44365 10.5.22.51:11211 TIME_WAIT ...