如何使用mod_perl适当地减少冗余请求的数量?
在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为Moose类。这些模块中的每一个都需要数据库访问才能(延迟)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据 现在,我该如何正确地做到这一点?我有几种选择:如何使用mod_perl适当地减少冗余请求的数量?,perl,caching,moose,kiokudb,Perl,Caching,Moose,Kiokudb,在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为Moose类。这些模块中的每一个都需要数据库访问才能(延迟)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据 现在,我该如何正确地做到这一点?我有几种选择: 通过一个角色在我的Moose类中实现缓存,将它们存储在memcached中,过期时间为5-10分钟(可能不太困难,但惰性属性很棘手)update:KiokuDB可能会在这里有所帮助,但必须阅读属性 迁移到DBIx::Class(无论如何都需要完成)并在这个级
memcached
中,过期时间为5-10分钟(可能不太困难,但惰性属性很棘手)update:KiokuDB可能会在这里有所帮助,但必须阅读属性DBIx::Class
(无论如何都需要完成)并在这个级别上实现缓存(DBIC可能会自己消除大部分痛苦)你会怎么做,你认为一个明智的方法是缓存对象或ORM级别上的数据吗?
< P>因为你已经准备好做DIC了,让这个变化来处理它是有意义的。至少,您使用的是DBIC,但使用的是自主开发的缓存……”出于某种原因 不这样做的唯一原因是(1)如果您现在真的需要这种性能,并且没有时间等待DBIC的更改,因为我认为这将是相当广泛的。或者(2),如果您不确定是否真的要迁移到DBIC。如果您没有进行调查,并且正在使用大量自定义SQL而不是基本CRUD,那么最终可能会获得非常小的投资回报。第三个问题的简短答案是:不要使用“我的”。您可以这样做: 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脚本中,以便在所有子级之间共享