在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为 Moose 类。这些模块中的每一个都需要数据库访问(惰性)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据。
现在,我该如何正确地做到这一点?我有几种选择:
memcached
中到期 5-10 分钟(可能不太难,但对于惰性属性很棘手)更新 : KiokuDB 在这里可能会有所帮助,必须阅读属性 DBIx::Class
(无论如何都需要完成)并在此级别上实现缓存(DBIC 可能会自行消除大部分痛苦)你将如何做到这一点,你认为什么是理智的方式?在对象或 ORM 级别上优先缓存数据吗?
最佳答案
对#3 的简短回答是:不要使用“我的”。您可能会执行以下操作:
use vars qw($object);
# OR post perl5.6:
# our ($object);
# create your object if it doesn't already exist
$object ||= create_object;
# Maybe reload some attributes if they have expired.
$object->check_expires;
在您的处理程序中像这样创建的对象只会在每个 Apache 子项内部共享,如果您每 5-10 分钟重新加载一次数据,这很好。任何只读的模块和对象都应该加载到 PerlPostConfigRequire 脚本中,以便在所有子项之间共享它们。
关于perl - 如何使用 mod_perl 正确减少冗余请求的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402131/