Hack语言中的Memoize属性 - 缓存超时

时间:2016-07-06 15:31:31

标签: php hacklang

Hack具有<<__Memoize>>属性,可以轻松缓存方法结果。

如何在有限的时间内使用它来缓存某些数据库或API请求的结果?

假设我的代码经常需要来自数据库的一些信息:

public function loadEmployees(
  string $company_name,
): ImmSet<string> {
  return $this->db->sqlQuery(...);
}

为了提高性能,我想将结果缓存一分钟。

如果数据发生变化,我的程序应该在一分钟内看到它。结果陈旧一分钟我很好。

选中official docs

2 个答案:

答案 0 :(得分:3)

&lt;&lt; __ Memoize&gt;&gt; 仅在请求的生命周期内缓存,并且不会在请求之间共享。您的HTTP请求持续时间超过一分钟的可能性极小,因此您需要一个跨多个请求共享的缓存。 APC通常用于此(见http://php.net/apc)。如果您真的希望在请求中更精细地控制缓存,则需要使用静态成员或全局变量来自行编写。

答案 1 :(得分:2)

Memoize仅存在于请求的上下文中。您的请求需要一分多钟?如果是这种情况,Memoize不适合您的使用案例。