如何使用mod_perl适当地减少冗余请求的数量?

如何使用mod_perl适当地减少冗余请求的数量?,perl,caching,moose,kiokudb,Perl,Caching,Moose,Kiokudb,在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为Moose类。这些模块中的每一个都需要数据库访问才能(延迟)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据 现在,我该如何正确地做到这一点?我有几种选择: 通过一个角色在我的Moose类中实现缓存,将它们存储在memcached中,过期时间为5-10分钟(可能不太困难,但惰性属性很棘手)update:KiokuDB可能会在这里有所帮助,但必须阅读属性 迁移到DBIx::Class(无论如何都需要完成)并在这个级

在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为Moose类。这些模块中的每一个都需要数据库访问才能(延迟)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据

现在,我该如何正确地做到这一点?我有几种选择:

  • 通过一个角色在我的Moose类中实现缓存,将它们存储在
    memcached
    中,过期时间为5-10分钟(可能不太困难,但惰性属性很棘手)update:KiokuDB可能会在这里有所帮助,但必须阅读属性
  • 迁移到
    DBIx::Class
    (无论如何都需要完成)并在这个级别上实现缓存(DBIC可能会自己消除大部分痛苦)
  • 以某种方式使我的对象在mod_perl进程中持久化(不知道如何做到这一点:()

  • 你会怎么做,你认为一个明智的方法是缓存对象或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脚本中,以便在所有子级之间共享