缓存数据库中存在的图像

时间:2011-04-17 23:58:11

标签: java image jsp caching

我将具有唯一ID的图像作为BLOB存储在数据库中,并通过从数据库中流式传输将它们显示在jsp页面中。想知道是否有办法缓存图像,这样我就不必因数据流流出而导致延迟。如果有人提供一些片段/示例以便实现图像缓存,我会建议。

2 个答案:

答案 0 :(得分:2)

你没有说你需要帮助的过程的哪一部分,但这就是我要做的事情:

首先,您必须创建一个类来保存缓存和元数据。我们称之为ImageCache。当然,您需要一个String作为图像名称,一个byte []来保存图像内容本身。然后在当前从数据库中提取图像的类中添加它们的集合。当图像请求进入时,在集合中搜索文件名。如果找到,只需发送字节[]。如果它不在集合中,则从db中读取它,然后从中创建一个新的ImageCache对象并将其添加到集合中。

对于奖励积分,请包含Date lastAccessed字段和Comparator。比较器和日期字段将允许您维护缓存。假设您的缓存可以容纳50张图像(基于可用内存)。您的Comparator可用于按LRU (Least Recently Used)顺序对ImageCache对象的集合进行排序,按lastAccesed按升序排序。当集合达到最大条目时,找到具有最旧lastEccessed的条目,并替换它。这将为您提供最佳的缓存命中率,同时不占用所有堆内存。

另一种选择是将Hibernate用作程序和数据库之间的抽象层。这将提供许多好处,其中之一是高度可配置和完全自动缓存。

答案 1 :(得分:0)

只需在Web服务器前面打一个nginx(一个http缓存反向代理)。代码已经编写好了,所以只需使用它。