使用MySQL和Redis的Laravel,使用hasMany()过滤项目的最佳方法
我正在开发一个应用程序,我想第一次使用Redis来加快部分查询速度。可以肯定的是,我希望将MySQL保留在后台作为备用方案,并以我熟悉的方式保持数据的相关性 让我描述一下我的情况: 我有三种模型:使用MySQL和Redis的Laravel,使用hasMany()过滤项目的最佳方法,mysql,laravel,optimization,redis,eloquent,Mysql,Laravel,Optimization,Redis,Eloquent,我正在开发一个应用程序,我想第一次使用Redis来加快部分查询速度。可以肯定的是,我希望将MySQL保留在后台作为备用方案,并以我熟悉的方式保持数据的相关性 让我描述一下我的情况: 我有三种模型:类别、子类别和事件 事件列包括:id,子类别id,发生在,参数,参数 事件属于子类别,子类别属于类别。这是一对多的关系 我的想法如下: 无论何时创建事件实例,我都会创建Redis(请原谅我的语法,因为我曾经研究过Redis): event:{event\u id}类别4子类别25在“发生在”参数12参数
类别
、子类别
和事件
事件
列包括:id
,子类别id
,发生在
,参数
,参数
事件
属于子类别
,子类别
属于类别
。这是一对多的关系
我的想法如下:
无论何时创建事件
实例,我都会创建Redis(请原谅我的语法,因为我曾经研究过Redis):
event:{event\u id}类别4子类别25在“发生在”参数12参数2 55处
现在我在Redis中有了这些功能,我想进行以下查询:
- 浏览所有事件并获取唯一的category_id->返回MySQL并使用Elount获取这些类别的信息(如描述等)
- 检查所有事件,并使用category_id进行过滤(例如,参数_1大于245->),然后再次返回MySQL并使用Eloquent获取这些类别的信息(如描述等)
类别
实例,还是应该将Redis哈希中的所有数据保存为:
事件:{event\u id}类别4子类别25在“发生在”参数\u 1 12参数\u 2 55类别\u参数\u 1“类别模型的一些数据”类别\u参数\u 2“类别模型的一些其他数据”
第三个想法:为categor创建另一组hash,并获取它们,而不是从有说服力的数据库中获取数据
category:{category\u id}category\u参数\u 1“一些数据”category\u参数\u 2“更多数据”
任何类似教程的想法、建议和链接都是非常受欢迎的。谢谢
更新:
有说服力的查询示例:
在类别中
型号:
public function events()
{
return $this->hasManyThrough('Event', 'Subcategory');
}
那么查询将是:
$categories = Category::whereHas('events', function ($query) {
$query->where('occurs_at', '>=', Carbon::today());
})->get();
希望我没有错过任何东西。如果您能提供一个示例SQL查询并解释为什么它需要更快,那就太好了。@ArminSam我想提高我的技能并学习Redis。我将在代码中添加示例查询,请稍候。