sql >> Base de Datos >  >> NoSQL >> Redis

Comprender el almacenamiento en caché de Laravel:fachada de caché y Redis

Común:

Son todos caché .

Todos se utilizan para reducir el costo del tiempo .

Diferente:

Configuraciones y Rutas:

Pertenece a aplicación . Lo llamamos caché de aplicaciones .

php artisan config:cache
php artisan route:cache

Estos dos comandos almacenan en caché rutas y configuraciones.

RUTA:

Siempre se almacenan en bootstrap/cache/

Corriendo

php artisan config:clear
php artisan route:clear

Solo borre los directorios y archivos en bootstrap/cache/ .

Son estáticos . Entonces solo se cambian cuando tú los cambias.

Beneficio

Si los cambia, debe clear y cache manualmente.

Después de seleccionar estas rutas y configuraciones.

Laravel no necesita volver a leer las configuraciones y rutas del archivo lo que tomó el costo de tiempo de IO.

Caché del sistema de archivos y caché de Redis:

La caché del sistema de archivos y la caché de Redis también son caché.

Sin embargo, usan controlador diferente para almacenar los datos, significa dónde almacena los datos de almacenamiento en caché .

RUTA del sistema de archivos:si está utilizando un controlador de sistema de archivos. se almacenan en storage/framework/cache/

Reids PATH:Almacén de datos en redis por clave-valor.

¿Cuándo los usas?

Cuando descubrió que hay muchas solicitudes a este código para obtener datos. Y estos datos no se cambian tan rápido.

Puede usar el caché para almacenarlos, y luego, la próxima vez que haga otra solicitud a esta API, simplemente tome los datos del caché, como a continuación:

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

La primera solicitud obtiene los datos de las publicaciones de la base de datos y luego almacena estos datos en el caché (Reids o Filesystem) caducó después de 30 segundos.

La próxima solicitud obtiene los datos de las publicaciones solo a través del caché. No necesitan volver a buscar en las bases de datos.

Y este:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

Significa cuando las personas solicitan localhost:8000/ , el número de visitas de los usuarios aumenta en redis (no es necesario almacenar en la base de datos, cuesta más tiempo), la próxima vez, cuando solicite el recuento de visitas de búsqueda, se puede encontrar en redis muy rápidamente.

PD:aquí usa Redis Facade, luego los datos se almacenan en redis .

Si está utilizando redis como controlador de caché, Cache::remember() también almacenará datos en redis.

Sin embargo, al usar Redis Facade, puede usar muchos métodos de redis.

¿Cuál es mejor?

Creo que redis es mejor que filesystem .

  1. Porque redis almacenar datos en la memoria y almacenar el sistema de archivos en el disco. Leer datos de la memoria es más rápido que el disco.

  2. Operar datas en Redis es más fácil que el sistema de archivos. Por ejemplo, Redis admite borrar todo el caché para una etiqueta específica, pero el sistema de archivos no puede [porque el sistema de archivos almacena datos de caché por nombre de clave encriptada].

  3. Para distribuido servidor, la memoria caché del sistema de archivos es una mala idea. Proporción de aciertos de caché más baja.

Honestamente, se pueden elegir otros controladores, como mongodb .

Por cierto, mi inglés no es muy bueno, espero que lo entiendas.