频繁更新缓存数据laravel

时间:2017-04-29 09:08:31

标签: php laravel caching

我目前使用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时出现问题。分数栏不会更新

1 个答案:

答案 0 :(得分:1)

TL; DR - 不缓存经常更新的内容(特别是如果您按照分页进行排序)。重新查询您的数据库并使用索引以获得性能。

但是,如果你还想追逐你的方法...... 应在数据库中更新score,但您会从缓存中获得所谓的stale数据。更新分数时我们可能需要Cache::forget('posts' . $page);(我建议使用事件),因此每当分数更新时,您都要查询最新的数据。