gpt4 book ai didi

laravel - 设计 Laravel 缓存(Redis)架构

转载 作者:可可西里 更新时间:2023-11-01 10:54:00 26 4
gpt4 key购买 nike

我正在为我的 api 设计一个缓存架构,但我遇到了与 Laravel 关系的问题。这就是我当前解决方案的工作原理:

我的目标是缓存整个响应而不是缓存单个模型,因此我将 Laravel 的命名路由与实际 url 的组合用于我的缓存名称。例如:

http://api.site.com/posts/1?with=author&status=1

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 缓存也应该被更新。我找不到一个干净的方法来做到这一点。

有什么好的解决办法吗?还是缓存整个响应是个坏主意,我应该只切换到缓存模型。我真的不喜欢存储库模式给项目增加的复杂程度。

最佳答案

所以,在我看来,您有 2 个问题:

<强>1。您应该为此类请求使用缓存吗?

好吧,这取决于用例。

通常您会使用缓存进行频繁的查询(当您需要频繁执行特定的读取操作但不那么频繁地写入时)。如果不是这种情况,您通常会回退到数据库。

当您针对相反的情况进行拍摄时,就会出现问题 - 您开始缓存不频繁的查询。这会对您的应用造成影响,而数据库通常是执行此操作的最佳方式。

So, for instance, in your case it might make sense just to cache the most popular / frequently accessed posts and fallback to the database for the rest.

<强>2。如何缓存有关系的东西?

使用cache tags在 Laravel 中。只需使用相同的标签(例如 posts.postid.authorid)标记缓存的帖子和缓存的作者,然后您就可以像这样刷新标签:Cache::tags('tagname')->flush();

关于laravel - 设计 Laravel 缓存(Redis)架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47758308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com