2011-04-17 221 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缓存反向代理)。代码已经写好了,所以就使用它。