Php 我是否以正确的方式使用memcached?

Php 我是否以正确的方式使用memcached?,php,mysql,memcached,Php,Mysql,Memcached,我目前正在使用MySQL和iMagick创建一个图像库。上传每个图像,通过imageMagick运行,然后将文件名和扩展名存储在MySQL数据库中,格式为PID、文件名和扩展名。我可以通过DB进行迭代,将所有图像打印到页面上,代码如下: $gallerySQL = mysqli_query($connection, "SELECT * FROM gallery"); while($row = mysqli_fetch_array($gallerySQL)){ $file = $row['

我目前正在使用MySQL和iMagick创建一个图像库。上传每个图像,通过imageMagick运行,然后将文件名和扩展名存储在MySQL数据库中,格式为PID、文件名和扩展名。我可以通过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的,所以我不确定我是以正确的方式进行操作,还是完全以错误的方式使用这些工具。什么是最好的方法来跟踪多高的关键应该去?目前我已经硬编码了四个,因为我知道它需要加载多少图像,但显然这不是正确的解决方案


如果我能得到一些关于我的用法的评论,或者一些推荐教程的链接,那就太好了!我觉得我正在拼凑一种方法来完成这项工作,memcached版本的使用表格来布局您的网页。

缓存的使用非常简单:

检查缓存以查找项目 如果不存在,则获取或创建它并将其放入缓存 送货 您可以想出三种方法来填充缓存,并根据要缓存的数据选择策略—有多少数据、查找/准备数据需要多长时间、使用频率、缓存效果如何

一次取一个项目 一次获取多个项目 一次获取所有项目 第一种策略是,当创建数据需要相当长的时间,并且数据可以很好地缓存时,可以在缓存中保留一段合理的时间。创建缓存项可能需要更长的时间,后续调用将在缓存中找到数据,并且速度非常快

第二种策略是,当您有很多可缓存的记录,并且可以在可重新缓存的时间内确定子集,并且数据不会频繁更改,因此可以很好地缓存。 此策略也可用于预取可推测的项目,如获取此ID和下面的10,因为它们可能会在几分钟内使用

如果您只有少量的项目,但它们经常被访问,那么第三种策略很有用。通过这种方式可以减轻数据库的大量负载想象一下,数据每分钟使用1000次,缓存一分钟即可将查询量从1000次减少到1次。每当缓存中缺少一个项时,刷新整个内容

具体到你的情况,我推荐策略3

您可以检查所需项目的缓存。如果不存在,则获取整个记录列表并将所有内容放入缓存,对每个项目使用唯一的键,并且不要忘记选择请求的项目。 在后续的查找中,应该从缓存中找到并提供每个记录