perl - 如何使用 mod_perl 正确减少冗余请求的数量?

标签 perl caching moose kiokudb

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

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

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

  • 你将如何做到这一点,你认为什么是理智的方式?在对象或 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/

    相关文章:

    Perl fork 套接字服务器,当客户端断开连接时停止接受连接

    XML::LibXML 问题查找具有命名空间的 XML 节点

    linux - 文件说它在那里,但它根本不在那里

    mysql - mysql memcached ndb 集群中如何进行更新

    perl - 谁能用 Perl 解释一下(我的 $self = shift)

    perl - Moose:如何获取对象数组?特质?

    perl - 如何使用 PerlScript 创建带有操作的 HTML 按钮并将其附加到 DOM?

    http - 请求 <HTTP 级缓存> 解释

    javascript - 如何强制使用当前脚本?

    Perl Moose - 从配置文件加载值时的参数是什么?