es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Laravel olvidar caché.

Laravel 8.0 CACHE_DRIVER=file.

Almacenado en la caché ‘posts’ y ‘post_detail’.

Estoy usando la URL completa para guardar en caché una página única de la paginación de publicaciones.

public function __contructor()
{

$this->full_url = request()->fullUrl();

}

// TODAS LAS PUBLICACIONES CON PAGINACIÓN

public function posts()
{

if (Cache::has(“posts_”.$this->full_url)) {

 $posts = Cache::get("posts_".$this->full_url);

} else {

   $posts = Cache::rememberForever($this->full_url, function() {
             return Post::paginate(15);
  });

}

}

// DETALLE DE PUBLICACIÓN

public function post_detail($slug)
{

if (Cache::has(“post_detail_”.$this->full_url)) {

 $post_detail = Cache::get("post_detail_".$this->full_url);

} else {

   $post_detail = Cache::rememberForever("post_detail_".$this->full_url, function() {
             return Post::where('slug', $slug)->first();
  });

}

}

Puedo olvidar la caché solo para ‘post_detail’, pero no tengo idea de cómo eliminar la caché para todas las publicaciones que incluyen la clave ‘posts’.

// ACTUALIZAR PUBLICACIÓN

public function update()
{

$post->update();
$full_url = $request->getSchemeAndHttpHost().”/”.$post->post_categories->category_slug . “/” .$post->slug);
Cache::forget(“post_detail_”.$full_url.””); // OK
Cache::forget(“posts_*”); // Olvida todas las publicaciones que contienen la clave ‘posts_’.
}

Gracias

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para eliminar la caché de todas las publicaciones que incluyen la clave ‘posts_’, puedes utilizar el método Cache::deleteMatching() introducido en Laravel 8.x. Este método te permite eliminar múltiples entradas de caché que coinciden con un patrón dado.

    Aquí tienes cómo puedes modificar el método update() para eliminar todas las publicaciones en caché:

    public function update() 
    {
       ...
       $post->update();
       $full_url = $request->getSchemeAndHttpHost()."/".$post->post_categories->category_slug . "/" .$post->slug);
       Cache::forget("post_detail_".$full_url.""); // Eliminar caché para el detalle de la publicación
       Cache::deleteMatching('posts_*'); // Eliminar todas las publicaciones en caché
    }
    

    Con esta modificación, se eliminarán todas las entradas de caché que coincidan con el patrón ‘posts_*’, lo que resultará en la eliminación de todas las publicaciones en caché.

    Nota: Asegúrate de utilizar Laravel 8.x o una versión superior para poder utilizar este método.

Comments are closed.