laravel - Laravel 搜索缓存
问题描述
我是 Laravel 的新手(和一般的编码),我有一个小的 Pizza Ordering 系统,可以将客户下的订单存储到当地的 Pizzaria。
在“新订单”表单中,当您开始输入比萨饼的名称(四种奶酪、鸡肉、yada yada)时,程序会返回一个查询搜索,该查询搜索每隔 2 次 keydowns 运行一次具有相似名称的产品。
这是搜索查询,一个非常简单和基本的查询:
$pesquisa = json_decode($request->getContent(), true);
$produtos = Produto::select('nome', 'valor')->where('nome', 'LIKE', '%'.$pesquisa.'%')->get();
return response()->json($produtos);
这是我遇到的“问题”:当前数据库大约有 50 个项目,大约需要 500 毫秒才能获得回报。这在我的本地机器上,当它实际托管在服务器中时,问题会变得更大一些,它可能会从 ~500ms 飙升到 ~2s,具体取决于用户连接。
在我的研究中,我听说过缓存,它可以缩短或消除对查询的需求(这已经在“显示所有已下达的订单”列表中实现,并且确实最大限度地降低了加载速度),但我没有不知道缓存是否可以通过用户输入的搜索来完成?
第一个问题:如何将这些披萨名称保存到缓存中,同时仍根据用户输入对它们进行排序?
第二个问题:这样的缓存是加速用户输入搜索的“最佳”方式吗?还有什么我应该先做的吗?(我听说“LIKE”查询搜索是最慢的......我应该研究并尝试另一种类型吗?)
非常感谢所有解释、提示和技巧!谢谢!
解决方案
对于缓存,您可以使用它
$pesquisa = json_decode($request->getContent(), true);
return Cache::remember($pesquisa, $seconds, function ()use($pesquisa) {
$produtos = Produto::select('nome', 'valor')->where('nome', 'LIKE', '%'.$pesquisa.'%')->get();
return response()->json($produtos);
});
rememberForever 也可以用来代替 remember
推荐阅读
- c# - IndexOutOfRangeException:尝试访问 GameObject 数组时,数组索引超出范围?
- postgresql - ORDER BY 会影响多个 WHERE 条件吗?
- android - Unity VR 场景到 2D 场景
- c - 如何从C中的单个文件中提取多个字符串
- java - Spring cloud netflix eureka server - 启动时出现tomcat错误
- android - 如何在 MVP 中测试读取/更新文件?
- php - php从新数组追加到json数组
- java - 如何以编程方式在顶部和底部的垂直线性布局中设置一个视图?
- php - 缓慢的 PHP 会话
- javascript - 为什么“Circle”类看不到我发送给他的参数?