我目前正在使用 MySQL 和 iMagick 创建图像库。每个图像都被上传,通过 imageMagick 运行,然后将文件名和扩展名存储在 MySQL DB 中,格式为 PID、文件名、扩展名。我可以使用以下代码遍历数据库以将所有图像打印到页面上:
$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。图片库不会经常更改,因此它似乎是一个很好的缓存候选者,而不是每次页面加载时都进行多次数据库点击。我为此编写的代码是:
$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 上)所以我不确定我是否以正确的方式进行此操作,或者我是否正在使用工具完全以错误的方式。跟踪键应该有多高的最佳方法是什么?目前我已经硬编码为四个,因为我知道它必须加载多少图像,但显然这不是正确的解决方案。
如果我能得到一些关于我的使用的批评,可能还有一些推荐教程的链接,那就太好了!我觉得我正在拼凑一种方法来完成这项工作,即使用表格来布置网页的 memcached 版本。