2009-11-29 89 views
0

在我的Apache服务器上,我有一个PHP服务来获取请求并从它们生成一个图像。我想要做的是将生成的图像缓存在我的服务器(非客户端的浏览器)上,因此如果具有特定参数的图像已经生成并且有人请求它,我的web服务器将返回缓存图像,而不是生成新的一个。Apache服务器缓存图像

我知道我可以将生成的图像手动存储在服务器上,并在每次请求时检查它们是否存在,然后运行cron任务以删除过期的图像,但我正在寻找更有效的方法。

谢谢。

回答

1

您已经提到了最有效的方法。将其存储在磁盘上。您可以使用类似memcache的东西,将其存储在memcache中,然后让memcache在一段时间后自动使记录失效。

+2

@nigative,我建议您仔细阅读关于memcached的文档并进行一些测试,因为默认情况下最大对象大小为1MB,可能比您的图片小。 http://dev.mysql.com/doc/refman/5.0/en/ha-memcached-faq.html – 2009-11-29 22:59:25

+0

所以在那种情况下,我仍然需要处理我的PHP代码中的一切? 从请求字符串生成密钥,检查在memcache中是否存在该密钥的记录,如果存在,则返回它,否则生成一个新图像,密钥并将其存储在memcache中? – 2009-11-29 23:01:57

1

就像你说的那样,将它存储在磁盘上并将其读回客户端。 您可以拥有ID.ext和ID.date,其中ID.date包含过期日期(在unix时间内)。 然后只是比较ID.date和什么时间()所说的内容,如果time()大于ID.date的内容,那么删除这两个文件并重新生成图像。

+2

ID.date不是必需的,只需要stat()文件来获取它的创建日期。 – 2009-11-29 23:02:04

1

根据您生成图像的方式,您可能可以使用mod_cache为您进行缓存。

+0

它看起来像浏览器(HTTP标题)中的mod_expires缓存页面,而不是在服务器上。 – 2009-11-29 23:11:16

+1

哦,哎呀。想到一件事,键入/链接另一个。其实意味着建议mod_cache,将编辑。 – Amber 2009-11-30 00:15:01