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

标签 laravel caching laravel-5 redis

我正在为我的 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/

相关文章:

laravel - 无法从 SeeJson 单元测试中获取错误

Laravel : How to localize dates within views with Carbon

javascript - 如何触发清除iframe父页面的缓存?

jquery - 选择多个缓存元素

google-chrome - 检查网络响应是来自服务器还是 Chrome 缓存

php - 如何在 laravel 中使用 IF(expression, value_if_true,value_if_false) 创建条件查询?

php - 具有多种模型的 Eloquent ORM

laravel - 如何在 Lumen 中使用辅助函数?

php - Laravel 模式 - 作业与服务的使用

php - Laravel 5 中的多种身份验证用户类型