現在、MySQL と iMagick を使用して画像のギャラリーを作成しています。各画像はアップロードされ、imageMagick を介して実行され、ファイル名と拡張子が PID、ファイル名、拡張子の形式で MySQL DB に保存されます。以下のコードを使用して、DB を反復処理して、すべての画像をページに正常に出力できます。
$gallerySQL = mysqli_query($connection, "SELECT * FROM gallery");
while($row = mysqli_fetch_array($gallerySQL)){
$file = $row['filename'].$row['ext'];
$thumb = $row['filename']."-thumb.png";
$blur = $row['filename']."-thumbB.png";
?>
<a href="<?php echo $file ?>"><img src="<?php echo $thumb ?>" onmouseover="this.src='<?php echo $blur ?>'" onmouseout="this.src='<?php echo $thumb ?>'" alt="Loaded from DB" /></a>
<?php
}
?>
ただし、memcached をこれに実装する方法がわかりません。画像ギャラリーは頻繁に変更されるわけではないため、ページが読み込まれるたびに複数の DB ヒットを取得するよりも、キャッシュに適しているようです。これを行うために私が書いたコードは次のとおりです。
$num = 0;
$key = "img_".$num;
$pics = mysqli_query($connection, "SELECT * FROM gallery");
while($num<4){
while($row = mysqli_fetch_array($pics)){
$key = "img_".$num;
if(!$mem->get($key)){
$file = $row['filename'].$row['ext'];
$thumb = $row['filename']."-thumb.png";
$blur = $row['filename']."-thumbB.png";
?>
<a href="<?php echo $file; ?>"><img src="<?php echo $thumb ?>" onmouseover="this.src='<?php echo $blur ?>'" onmouseout="this.src='<?php echo $thumb ?>'" alt="Loaded from DB" /></a>
<?php
$key = "img_".$num;
$mem->add($key, $row['filename']);
$key = "ext_".$num;
$mem->add($key, $row['ext']);
} else {
$key = "img_".$num;
$file = $mem->get($key);
$key = "ext_".$num;
$ext = $mem->get($key);
?>
<a href="<?php echo $file.$ext; ?>"><img src="<?php echo $file."-thumb.png" ?>" onmouseover="this.src='<?php echo $file."-thumbB.png" ?>'" onmouseout="this.src='<?php echo $file."-thumb.png" ?>'" alt="Loaded from MemCached" /></a>
<?php
}
$num++;
} // end while(row)
}// end while(num)
?>
これは問題なく動作するようですが、MemCached に関する多くのチュートリアルが見つからないため (ほとんどが MemCache にあるようです)、これについて正しい方法で行っているのか、それともツールは完全に間違った方法で。キーの高さを追跡する最良の方法は何ですか? 現時点では、ロードする必要がある画像の数がわかっているため、4 つにハードコードしましたが、明らかにそれは正しい解決策ではありません。
私の使用法に関する批評と、推奨されるチュートリアルへのリンクを得ることができれば、それは素晴らしいことです! テーブルを使用して Web ページをレイアウトする memcached バージョンです。