2013-06-21 43 views
1

我正在研究PHP Web应用程序,其中我必须在我的数据库中引入缓存层。为图像创建缓存层

具体而言,以在从DB截取的高速缓存层存储图像时,图像的尺寸大:4-8 MP。什么是最好的方法来做到这一点?我应该使用哪些数据源?

+0

什么是“缓存层”? – 2013-06-21 04:24:59

+0

我的意思是将缓存添加到数据访问层 – Taz

+3

最初只是将它们存储在文件系统中。在这种情况下,您不需要任何缓存层 – zerkms

回答

2

下面是一个方案建议:

创建三个文件夹 - 缩略图,显示图像和原始图像。在这些中,您将存储缩略图的缓存版本,用于网页显示的已调整大小的版本以及原始图像。

上传图像时,在文件系统中为其指定一个唯一名称并将其存储在那里。将原始名称和唯一名称与任何其他相关信息一起存储在数据库中。

假设你有某种图像浏览器,从这些图像选择...

从数据库中检索图像数据。用它来查找缩略图,显示版本或原件。

当浏览图像时查找现有缩略图。如果你有,发送它。如果您不这样做,请创建一个,将其存储在缩略图文件夹中,然后发送。

当图像被放大为在浏览器中显示,检查用于显示版本等作为缩略图。使用调整大小的版本进行显示,因为4-8Mp是为Web浏览器发送的大量数据。

当选择图像下载时,发送原件。

你要小心,在这一切的Cache-Control - PHP输出不会自动被缓存,所以你需要自己添加标题。正确执行此操作可以显着加快应用程序的速度。

你可以玩这个添加子文件,如果这是有道理的,调整缓存大小调整图像等

祝你好运!

0

首先,在DB大家存储图像的建议是不是一个好主意。我认为这里的“缓存层”你的意思是不是火查询数据库,如果图像是已经存在于文件系统。如果多数民众赞成的情况下...

保留所有你们从目录中使用脚本创建的最终图像。然后使用重写规则,如果存在则提供图像,否则将创建传递给PHP。

更多的解释..

http://www.sitepoint.com/forums/showthread.php?719010-PHP-image-caching-in-server

0

首先候为缓存住在一个目录......这应该是由Web服务器可写。

然后将您的请求参数映射到该目录中的文件名。

$filename = $_GET["id"]."_".$_GET["width"].".jpg"; 

然后,你将基本上遵循这种模式。

if (!file_exists($cache_dir.$filename)){ 
    // do your db query get the image and resize it to the width and then 
    // save it to $cache_dir.$filename 
} 

header("Content-Type: image/jpeg"); 
header("Content-Size: ".filesize($cache_dir.$filename)); 
readfile($cache_dir.$filename); 

您可能还需要增加一个检查,看看是否缓存记录已随着file_exists检查期满(时间与修改的时间)。

要从缓存中手动刷新某些内容,您只需从缓存目录中删除这些文件并重新生成这些文件即可,您可能希望在使用新文件更新数据库记录以保持缓存更新时执行此操作。