快速!Laravel Scout 的新优化让你的搜索速度提高了64倍
2023-10-13 20:29:32
下一个版本的 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 来实现高级搜索。你也可以使用缓存功能来进一步优化你的查询性能。