1

MySQLテーブルからデータをプルするphpスクリプトを実行しています。これを頻繁にアクセスするサーバーで実行し、データをX時間キャッシュに保持したいと思います。したがって、プルすると、データはサーバーに保存され、時間が経過していません。スクリプトは次のとおりです。

<?php
include('mysql_connection.php');

$c = mysqlConnect();

$locale = $_GET['locale'];
$last_news_id = $_GET['news_id'];

sendQuery ("set character_set_results='utf8'"); 
sendQuery ("set collation_connection='utf8_general_ci'"); 

if(strcmp($locale,"ru") != 0)
    $locale = "en";
$result = sendQuery("SELECT * FROM news WHERE id > ".$last_news_id." and locale = '".$locale."' ORDER BY id DESC LIMIT 10");
echo '<table width=\"100%\">';
while($row = mysqli_fetch_array($result, MYSQL_NUM))
{
    echo '<tr><td width=\"100%\"><b>Date: </b>'.$row[2].'</td></tr>';
    echo '<tr><td width=\"100%\">'.preg_replace('/#([^#]*)#(.*)/', ' <a href="$2" target="_blank">$1</a>', $row[3]).'</td></tr>';
    echo '<tr><td width=\"100%\"><hr style="height: 2px; border: none; background: #515151;"></td></tr>';
}
echo '</table>';

mysqliClose($c);

?>

データをキャッシュするために使用するphp関数は何ですか?最良の方法は何ですか?ありがとうございました!

4

4 に答える 4

2

php Memcacheを使用できます。スクリプトの「sendQuery()」関数の後にこのコードを追加して、次のようにキャッシュに保存します。

$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set($memcache_obj, 'var_key', $result, 0, 30);
echo memcache_get($memcache_obj, 'var_key');
于 2012-12-27T13:16:00.687 に答える
0

2つの頼りになるソリューションはAPCとMemcacheです。前者はopcacheでもあり、後者は配布できます。あなたに最適なものを選んでください。

于 2012-12-27T14:07:07.023 に答える
0

実際のところ、データはすでにサーバーに保存されています。
そして、そのようなクエリはかなり高速であるはずです。

したがって、ここではキャッシュは不要のようです。特に、負荷の問題は発生していませんが、万が一の場合に備えて実行している場合は特にそうです。

于 2012-12-27T14:14:54.597 に答える
0

Apc / Memcachedを使用でき、一般的にこのタイプのものに使用されます。ただし、このアプローチから発生する可能性のある問題(新しい挿入/更新の管理など)については注意する必要があります。この情報を本当に気にしない限り、データが期限切れになる任意の間隔を設定できますが、情報がアプリケーションに本当に関連している場合、このアプローチは機能しません。

また、mysqlは2つのリクエスト間で変更されていない選択をすでにキャッシュしているため、基本的に、今すぐ選択を実行し、まったく同じクエリで10分に1回実行すると、テーブルに何も変更されていない場合、クエリから結果が得られます。 mysqlのキャッシュ。データ要求の発行とデータの受信にはまだオーバーヘッドがありますが、非常に高速です。このアプローチは、デフォルトで更新/削除の問題で機能します。これは、テーブル内のレコードが変更されるたびに、関連するクエリキャッシュが消去されるため、すべての変更がそのまま取得されるためです。

于 2012-12-27T14:19:52.920 に答える