我创建了一个方法,它接受一个字符串值,将其与用户记录匹配,并返回匹配用户的记录。
我的代码:
class UsersPeer extends BaseUsersPeer
{
public static function getHashUser($hash)
{
$c = new Criteria();
$c->add(UsersPeer::HASH,$hash);
return UsersPeer::doSelectOne($c);
}
}
缓存此功能是否有意义?
我的理解是,由于传递给函数的字符串值对于不同的用户应始终不同,因此每次都要执行该函数。但是,对于之前已将字符串值传递给方法和检索记录的用户,它不应再次执行。只有在这种情况下,功能缓存才有效。
鉴于有大约50K用户,是否有理由为此方法启用缓存?
答案 0 :(得分:2)
这是一个非常简单的查询,即使哈希列没有被索引也应该很快(如果是的话,速度非常快) - 我认为没有理由缓存结果。
结果缓存通常用于查询复杂,包含聚合数据或子查询的情况。即使这样,您也应该首先处理查询,看看是否可以对其进行优化。
更新:
如果查看sfCache
类(所有具体缓存实现的基础),您将看到存储在缓存中的任何内容都具有生命周期,这意味着它只能在有限的时间内存储。这意味着缓存的大小是有限的。
缓存的工作原理如下:
是否值得缓存函数的返回值始终取决于性能测量。它是一个长期运行的计算密集型功能吗?这是性能瓶颈吗?如果您的答案是肯定的,则可能值得启用缓存。
还要记住,每次执行函数缓存时,都会增加必须维护的代码的数量(和复杂性)。