php - "cache" 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)
           ->pluck('value');

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

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

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

我正在使用 Laravel 4

最佳答案

静态缓存是最好的方法,只要您能接受其含义:

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

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

关于php - "cache" Eloquent 查询的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334230/

相关文章:

php - 在php中匹配并访问带有数据库列的字符串

mysql - 如何每隔一小时自动将Mongodb数据导出到Mysql?

mysql - 获取两个日期之间的天数(不包括年份)

mysql - 行编号 (@i := @i + 1) doesn't work as expected

php - 显示文本中的空格(Laravel 5.3)

mysql - 如何使用查询生成器在 Laravel 中计算重新访问的客户(超过 1 次)?

PHP+MySQL 获取数据并将其放入数据库

javascript - 如何在 AngularJS 中使用 CKEditor 上传图像?

php - 修复 WooCommerce 中购物车百分比的最大优惠券折扣

laravel - 如何使用 Post man send API 修复 bug laravel 验证器。验证器返回重定向 uri 根路径。它不会错误 json status 422