缓存Symfony自定义模型类方法

时间:2012-09-14 10:50:01

标签: caching symfony1 propel symfony-1.2

我创建了一个方法,它接受一个字符串值,将其与用户记录匹配,并返回匹配用户的记录。

我的代码:

class UsersPeer extends BaseUsersPeer
{
  public static function getHashUser($hash)
  {
    $c = new Criteria();
    $c->add(UsersPeer::HASH,$hash);
    return UsersPeer::doSelectOne($c);
  }
}

缓存此功能是否有意义?

我的理解是,由于传递给函数的字符串值对于不同的用户应始终不同,因此每次都要执行该函数。但是,对于之前已将字符串值传递给方法和检索记录的用户,它不应再次执行。只有在这种情况下,功能缓存才有效。

鉴于有大约50K用户,是否有理由为此方法启用缓存?

1 个答案:

答案 0 :(得分:2)

这是一个非常简单的查询,即使哈希列没有被索引也应该很快(如果是的话,速度非常快) - 我认为没有理由缓存结果。

结果缓存通常用于查询复杂,包含聚合数据或子查询的情况。即使这样,您也应该首先处理查询,看看是否可以对其进行优化。

更新

如果查看sfCache类(所有具体缓存实现的基础),您将看到存储在缓存中的任何内容都具有生命周期,这意味着它只能在有限的时间内存储。这意味着缓存的大小是有限的。

缓存的工作原理如下:

  • 你的函数被调用
  • 您从函数名称和参数
  • 计算缓存键
  • 询问缓存是否存在具有给定密钥的存储值
  • 如果是,则获取并返回
  • 您计算返回值
  • 您将其存储在缓存中然后将其返回

是否值得缓存函数的返回值始终取决于性能测量。它是一个长期运行的计算密集型功能吗?这是性能瓶颈吗?如果您的答案是肯定的,则可能值得启用缓存。

还要记住,每次执行函数缓存时,都会增加必须维护的代码的数量(和复杂性)。