Actualmente estoy almacenando publicaciones en caché usando el almacenamiento en caché incorporado de laravel con redis. sin embargo, tengo un problema al almacenar publicaciones en caché. básicamente tengo una columna llamada puntaje en la tabla de publicaciones que se actualiza cada vez que el usuario vota a favor o en contra y el problema es que si un usuario vota a favor o en contra de una publicación en caché, la columna de puntaje no se actualiza hasta que pasan 10 minutos (esos son los minutos hasta que el caché cambia usando la función integrada Cache::remember de laravel.¿Cuál es la mejor manera de resolver esto?Aquí hay un ejemplo de código de lo que quiero decir
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')); }Todo funciona perfectamente y las publicaciones se almacenan en caché. El problema aparece cuando el usuario vota a favor o en contra. la columna de puntuación no se actualiza
TL; DR: no almacene en caché lo que se actualiza con frecuencia (especialmente si ordena junto con la paginación). Vuelva a consultar su base de datos y use índices para el rendimiento.
Sin embargo, si aún desea seguir su enfoque... la score debe actualizarse en la base de datos, pero obtiene los llamados datos stale del caché. Es posible que desee Cache::forget('posts' . $page); cuando actualice el puntaje (recomiendo usar eventos), de modo que esté consultando los datos más actualizados, siempre que se actualice el puntaje.