【发布时间】:2018-05-25 07:02:59
【问题描述】:
我正在为我的 api 设计一个缓存架构,但我遇到了 laravel 关系的问题。这就是我当前的解决方案的工作原理:
我的目标是缓存整个响应而不是缓存单个模型,因此我将 Laravel 的命名路由与实际 url 的组合用于我的缓存名称。例如:
Route::group(['prefix' => 'posts','as' => 'Posts::'], function () {
Route::get('/{id}', 'PostController@find')->name('find')->middleware('check_cache');
});
将在 Redis 中存储为 Api::Posts::find::http://api.site.com/posts/1?with=author&status=1
这使我能够使用 Redis 通配符 (*) 在不同级别刷新缓存。这很好用,除非响应中有 Laravel 关系。例如,如果我在我的情况下更新了作者,则由于 Post 对 Author 的依赖性,也应该更新 Post 缓存。我找不到一个干净的方法来做到这一点。
有什么好的解决办法吗?或者缓存整个响应是一个坏主意,我应该切换到缓存模型。我真的不喜欢存储库模式给项目增加的复杂程度。
【问题讨论】:
标签: laravel caching laravel-5 redis