我需要一些方法来在用 Perl 编写的 Web 服务中缓存从 Internet 获取(或预获取)的数据。 收集的数据被解析为 XML 格式。 我的目标是缩短我的服务对用户请求的响应时间。
我看到有很多模块可用:就可用性和效率而言(按重要性顺序),哪个模块表现最好?
更新:
我正在评估 CHI、Cache 和 Cache::Cache(我认为它们已经过时了...)
我在 mod_perl2 Linux 环境中:在这种情况下,内存缓存是否有意义?
最佳答案
CHI
是一个很好的基础,可以做你可能需要的大部分缓存,根据你的需要选择后端。我们以前用Cache::Cache
,有时甚至是 Memoize
,但 CHI
最终表现最好,并且肯定取代了 Cache::Cache
。
现在是缓存后端系统。这在很大程度上取决于您的网络设置,甚至取决于您的操作系统和硬件。如果你有很多内存,和/或正在运行少量的服务器进程,基于内存的缓存是可靠和简单的。如果您正在运行许多进程并且仍然有足够的内存,您可能需要一个共享内存缓存(这在 Linux 和 UNIX 系统上运行良好,但在 Windows 上可能不受支持)。如果您的内存较少,基于文件的缓存也可以工作,但速度会更慢。
但是,如果您只是预取,您也可以使用数据库。即使缓存主要用于避免网络请求,SQL 数据库仍将提供您所需的性能改进。还有一个 CHI
驱动程序,位于:CHI::Driver::DBI
.不管怎样,大多数数据库都做了非常不错的缓存。
更新:
Cache
和 Cache::Cache
都很古老。 CHI
旨在取代 Cache::Cache
。其中,CHI
绝对是最好的。
是的,即使在 mod_perl 中,内存缓存也很有用,但您不能承受它变得太大。 mod_perl 将 Perl 嵌入到服务器进程中,因此每个服务器进程都有自己的缓存。这会降低效率,但是如果您要缓存的东西很少,而且经常使用,那么它仍然值得使用。
假设您使用的是 UNIX 类型的系统,共享内存缓存或数据库缓存可能是您的最佳选择,具体取决于您可能需要缓存的内容数量及其大小。如果您的缓存将变得巨大,并且网络延迟是问题的主要部分,那么数据库缓存后端就可以了。如果缓存总是相对较小,内存或共享内存应该适合。
关于Perl,哪个是为 Web 应用程序缓存数据的最佳模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871175/