【发布时间】:2017-04-29 09:08:31
【问题描述】:
我目前正在使用 laravel 内置的 redis 缓存来缓存帖子。但是我在缓存帖子时遇到了问题。我基本上在帖子表中有一个名为 score 的列,每当用户赞成/反对时,它就会更新,问题是如果用户赞成或反对缓存的帖子,则分数列在 10 分钟过去后才会更新(这是多少分钟直到使用 laravel 内置的 Cache::remember 函数缓存更改。解决这个问题的最佳方法是什么?这是我的意思的代码示例
public function home(Request $request)
{
//Get posts that have high scores and in the last 7 days..
// $posts = Post::with('user')->orderBy('score','desc')->whereRaw('created_at >= now() - INTERVAL 7 DAY')->paginate(30);
$page = $request->has('page') ? $request->query('page') : 1;
//$posts = Post::with('user')->orderBy('score','desc')->paginate(50);
$posts = Cache::remember('posts' . $page, 10, function(){
return Post::with('user')->orderBy('score','desc')->paginate(1);
});
return view('posts.home', compact('posts','page'));
}
一切正常,帖子被缓存,当用户赞成/反对时,问题就会出现。分数列不更新
【问题讨论】:
-
让 upvote/downvote 端点使相关缓存项无效。您甚至可以通过模型上的事件来执行此操作,因此每当模型更改相关缓存时,总是会自动清除。