首页 > 解决方案 > 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”查询搜索是最慢的......我应该研究并尝试另一种类型吗?)

非常感谢所有解释、提示和技巧!谢谢!

标签: laravelsearcheloquent

解决方案


对于缓存,您可以使用它

  $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


推荐阅读