8

memcached を補完するものとして、特定のデータを各 Web サーバーに格納するために APC を試し始めました。

ただし、次のコードは頭痛の種です。

echo apc_store('key', 'value');
echo apc_store('key', 'newvalue');
echo apc_fetch('key'); 

// Echoes: value

Memcached の例:

$memcached = new Memcached;

$memcached->addServer('localhost', '11211');

$memcached->set('key', 'value1');
echo $memcached->get('key') . '<br />'; // Echoes value1

$memcached->set('key', 'value2');
echo $memcached->get('key'). '<br />'; // Echoes value2

$memcached->set('key', 'value3');
echo $memcached->get('key'). '<br />'; // Echoes value3

apc_store が適切に機能しないのはなぜですか?

編集: これがバグによって引き起こされた場合、解決策を探すのに 2 時間も費やす人が他にいないことを確認するために、次のようにします: http://pecl.php.net/bugs/bug.php?id=16894&edit= 1 (ただし、最も効果的ではありません)

4

1 に答える 1

8

これは既知の問題のようです:PECLバグ#16814新しい警告「潜在的なキャッシュスラムがキーに対して回避されました」

apc_store()リクエストごとに1つしか許可されていないようです。私はこのテストを試しました:

<?php

echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n";
// echo "<p>apc_store(value): " . apc_store('key', 'value') . "</p>\n";
echo "<p>apc_store(newvalue): " . apc_store('key', 'newvalue') . "</p>\n";
echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n";

これを試して、2行目のコメントを外し、前のリクエストで設定されたキーを上書きすることを確認してください。ただし、特定のキーはリクエストごとに1回しか保存できません。

バグログには、この単一書き込み動作を無効apc.slam_defenseにする可能性のあるiniファイル設定が記載されています。Offでも簡単に試してみたところ、うまくいくか確認できませんでした。おそらくもっと運がいいでしょう(php.iniを変更するときはApacheを再起動することを忘れないでください)。

于 2010-05-26T19:42:58.533 に答える