3

我有一个像循环一样运行功能的应用程序SomeModel::getValue($month, $year, $departmentId)

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

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

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

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

我的解决方案好吗?你有什么其他想法吗?谢谢你!

我正在使用 Laravel 4

4

1 回答 1

1

只要您对其中的含义感到满意,静态缓存就是最好的方法:

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

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

于 2013-08-20T11:54:25.763 回答