Php “最好的方法”;“缓存”;雄辩的询问

Php “最好的方法”;“缓存”;雄辩的询问,php,mysql,laravel,laravel-4,eloquent,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) ->pl

我有一个应用程序,它在循环中运行类似于
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插入)--在所有情况下,只需保存序列化数组并在执行实际计算之前将其作为附加步骤加载即可。

请注意,APC和Memcached也使用非php序列化和非序列化来存储数组和对象,浮点、整数和字符串不会序列化,如果您存储大型阵列或对象,这可能会增加CPU负载。我不想详细说明,因为最初的问题是关于静态缓存的,但可以-假设您想使用任何跨请求缓存,根据大小和其他限制,最好将其分为多个小块,而不是一个大块,如果数组很大,每个数组项有1个条目。嘿,谢谢。这里的主要目标是为相同的参数运行一次查询。我想我将使用模型中的静态数组,因为数组将不包含超过100个项