返回

快速!Laravel Scout 的新优化让你的搜索速度提高了64倍

见解分享

下一个版本的 Laravel Scout 将会使你的模型查询速度提升64倍。 你能在这里 查看提交的 pull request。这篇文章解释了为什么代码中的这个更改会带来这么大的变化。这是我在我自己的 Laravel 应用中用来加速存在问题的查询的一个技巧。一旦你理解了它的原理,你就能使用 Scout Driver 来对你的应用进行同样的优化。

Laravel Scout 是一个用于在 Laravel 应用中实现高级搜索的功能包。它支持多种搜索引擎,包括 Elasticsearch、Algolia 和 Meilisearch。Scout 通过索引你的模型数据,使你可以使用全面的查询语言来搜索你的数据。

在即将发布的 Laravel Scout 版本中,有一个重要的优化:使用了 Scout Driver 中的缓存功能。这将显著提高你的查询速度,特别是在处理大量数据时。

缓存 Scout 查询

Scout Driver 现在可以将查询结果缓存到内存中。这将显著提高重复查询的性能,因为 Scout 不再需要每次都重新执行查询。

要启用缓存,你只需在你的 Scout 配置文件中设置 cache 选项为 true。例如:

scout:
    driver: elasticsearch
    cache: true

缓存的查询范围

Scout Driver 可以缓存各种类型的查询,包括:

  • 文本搜索
  • 范围搜索
  • 模糊搜索
  • 日期范围搜索

缓存的持续时间

Scout Driver 会将查询结果缓存一段时间。缓存的持续时间可以通过 cache_ttl 选项来设置。例如,要将缓存的持续时间设置为 1 小时,你可以这样设置:

scout:
    driver: elasticsearch
    cache: true
    cache_ttl: 3600

清除缓存

你可以在需要时清除缓存。这可以通过调用 clearCache 方法来完成。例如:

Scout::driver()->clearCache();

缓存 Scout 关系

你也可以缓存 Scout 关系。这将显著提高你访问相关模型的性能。

要缓存关系,你只需在你的 Scout 模型上使用 cacheFor 方法。例如:

class Post extends Model
{
    use Searchable;

    public function comments()
    {
        return $this->hasMany(Comment::class)->cacheFor(3600);
    }
}

这将把 Post 模型的评论关系缓存 1 小时。

缓存 Scout 关联

你也可以缓存 Scout 关联。这将显著提高你访问关联模型的性能。

要缓存关联,你只需在你的 Scout 模型上使用 cacheWith 方法。例如:

class Post extends Model
{
    use Searchable;

    public function author()
    {
        return $this->belongsTo(User::class)->cacheWith('profile');
    }
}

这将把 Post 模型的作者关联和关联用户的个人资料缓存 1 小时。

总结

使用 Scout Driver 中的缓存功能可以显著提高你的查询速度。这将使你的 Laravel 应用更加快速和响应迅速。

我强烈建议你在你的 Laravel 应用中使用 Scout Driver 来实现高级搜索。你也可以使用缓存功能来进一步优化你的查询性能。