2011-04-17 105 views
1

我將具有唯一標識的圖像作爲BLOB存儲在數據庫中,並通過從數據庫中流式傳輸將它們顯示在jsp頁面中。想知道是否有辦法緩存圖像,這樣我就不必因流入數據庫而產生延遲。我會建議如果有人提出一些片段/例子,以實現圖像緩存。緩存數據庫中的圖像

+0

難道你不能將它們與DB blob一起存儲在文件中嗎?這樣你就可以查找名稱/位置並從一個(希望)較少的磁盤訪問它們。 – bdares 2011-04-18 00:02:41

+0

這將是mismtach的候選人。我想避免在兩個地方有圖像,並希望將它們放在數據庫中,以便輕鬆移植它們。 – 2011-04-18 00:04:43

+0

好吧,我說你可以將它們存儲在數據庫中,並將它們存儲在文件中。這需要兩倍的空間,但是直到你想移植它們,你可以使用數據庫作爲備份和文件來更快地檢索。 – bdares 2011-04-18 01:58:54

回答

2

你不說什麼,你需要幫助,但這裏是我會做的過程的一部分:你有

首先要創建一個類來保存高速緩存和元數據。我們稱之爲ImageCache。當然,你需要一個字符串作爲圖像名稱,一個字節[]來保存圖像內容本身。然後將它們的集合添加到當前從數據庫中提取圖像的類中。當圖像請求進入時,搜索集合中的文件名。如果找到了,只需發送字節[]。如果它不在集合中,請從db中讀取它,然後從中創建一個新的ImageCache對象並將其添加到集合中。

對於獎勵積分,請包含Date lastAccessed字段和比較器。比較器和日期字段將允許您維護緩存。假設您的緩存可容納50張圖像(基於可用內存)。您的比較器可用於按LRU (Least Recently Used)的順序對ImageCache對象的集合進行排序,按lastAccesed按升序排序。當收集達到最大條目時,找到最舊的lastAccessed條目,並將其替換。這將爲您提供最佳的緩存命中率,同時不佔用所有堆內存。

另一種選擇是隻使用Hibernate作爲程序和數據庫之間的抽象層。這將提供許多好處,其中之一將是高度可配置的並且完全自動緩存。

+0

最初的外觀。讓我咀嚼更多這一點。 – 2011-04-18 02:52:02

0

只需在網頁服務器前打上nginx(一個http緩存反向代理)。代碼已經寫好了,所以就使用它。