2013-06-21 65 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檢查期滿(時間與修改的時間)。

要從緩存中手動刷新某些內容,您只需從緩存目錄中刪除這些文件並重新生成這些文件即可,您可能希望在使用新文件更新數據庫記錄以保持緩存更新時執行此操作。