奇妙な問題が発生しています。memcache関数を使用してクエリの出力をcount.phpという名前のファイルにキャッシュしています。このファイルは、ユーザーが特定のページを表示しているときにajaxによって毎秒呼び出されます。出力は5秒間キャッシュされるため、この時間内にこのファイルに5回ヒットする場合は、キャッシュされた結果が少なくとも3〜4回返されると予想されます。ただし、これは発生していません。代わりに、echoステートメントから明らかなようにクエリがdbに送信されるたびに、URLを入力してブラウザから直接ファイルが呼び出された場合(http://example.com/help/count.phpなど) )5秒以内に何度も繰り返しデータがキャッシュから返されます(これもechoステートメントから証明されます)。以下はcount.phpの関連コードです
mysql_connect(c_dbhost, c_dbuname, c_dbpsw) or die(mysql_error());
mysql_select_db(c_dbname) or die("Coud Not Find Database");
$product_id=$_POST['product_id'];
echo func_total_bids_count($product_id);
function func_total_bids_count($product_id)
{
$qry="select count(*) as bid_count from tbl_userbid where userbid_auction_id=".$product_id;
$row_count=func_row_count_only($qry);
return $row_count["bid_count"];
}
function func_row_count_only($qry)
{
if($_SERVER["HTTP_HOST"]!="localhost")
{
$o_cache = new Memcache;
$o_cache->connect('localhost', 11211) or die ("Could not connect to memcache");
//$key="total_bids" . md5($product_id);
$key = "KEY" . md5($qry);
$result = $o_cache->get($key);
if (!$result)
{
$qry_result = mysql_query($qry);
while($row=mysql_fetch_array($qry_result))
{
$row_count = $row;
$result = $row;
$o_cache->set($key, $result, 0, 5);
}
echo "From DB <br/>";
}
else
{
echo "From Cache <br/>";
}
$o_cache->close();
return $row_count;
}
}
ajaxがこのファイルを呼び出すと、毎秒DBがヒットするのに、ブラウザにURLを入力すると、キャッシュされたデータが返される理由がわかりません。URLメソッドを試すために、$ product_idを有効な番号に置き換えました(例:私の場合は$ product_id = 426)。最初のヒットから5秒以内にデータがキャッシュから返されると予想しているため、ここで何が問題になっているのかわかりません。データをキャッシュから返すようにしたい。誰かが私が何が起こっているのかを理解するのを手伝ってくれませんか?