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