我有一个应用程序在循环中运行类似 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 分钟),并将缓存推送到某种形式的交叉请求缓存,以便您可以重用它(请参阅 APC、Memcached,甚至是表中的简单 MySQL INSERT)——在所有情况下,只需保存序列化数组并在进行实际计算之前将其作为附加步骤加载。
关于php - "cache" Eloquent 查询的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334230/