我目前使用laravel内置的redis缓存来缓存帖子。但是我在缓存帖子时遇到了问题。我基本上在posts表中有一个名为score的列,只要用户upvotes / downvotes就会更新,问题是如果用户upvotes或downvotes一个缓存的帖子,得分列不会更新直到10分钟过去(&#39 ;使用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'));
}
一切正常,帖子缓存,当用户upvotes / downvotes时出现问题。分数栏不会更新
答案 0 :(得分:1)
TL; DR - 不缓存经常更新的内容(特别是如果您按照分页进行排序)。重新查询您的数据库并使用索引以获得性能。
但是,如果你还想追逐你的方法......
应在数据库中更新score
,但您会从缓存中获得所谓的stale
数据。更新分数时我们可能需要Cache::forget('posts' . $page);
(我建议使用事件),因此每当分数更新时,您都要查询最新的数据。