“缓存”Eloquent查询的最佳方式

时间:2013-08-20 11:48:24

标签: php mysql laravel laravel-4 eloquent

我有一个在循环中运行SomeModel::getValue($month, $year, $departmentId)函数的应用程序。

getValue创建一个查询并返回结果:

return self::where('department_id', '=', $department_id)
           ->where('year', '=', $year)
           ->where('month', '=', $month)
           ->pluck('value');

在这个循环中,它可能会多次调用相同的参数。 我想知道每次想要获取数据时避免创建新查询的最佳方法。

我考虑过在模型中创建一个静态数组,并在每次调用getValue时匹配它。如果数组中存在值,则返回它,如果不创建查询。

我的解决方案可以吗?你还有其他想法吗?谢谢!

我正在使用Laravel 4

1 个答案:

答案 0 :(得分:1)

静态缓存是最好的方法,只要您对其有效:

  • 您只对每个请求进行缓存 - 如果用户刷新,则从头开始重新创建缓存
  • 您将有一些内存开销来保持填充的静态数组。在你必须考虑并发性(每个请求都有自己的静态数组)之前,这本身并不是什么大不了的事。(

根据静态数组的最大大小,最好确定缓存有效的时间(例如1分钟),并将缓存推送到某种形式的跨请求缓存,以便您可以重用它(参见表中的APC,Memcached,甚至简单的MySQL INSERT) - 在所有情况下,只需保存序列化数组并在进行实际计算之前将其作为附加步骤加载。