sql >> Database >  >> NoSQL >> Redis

Laravel-caching begrijpen:cache-façade en Redis

Vaak:

Ze zijn allemaal in de cache .

Ze worden allemaal gebruikt om tijdkosten te verlagen .

Differenet:

Configuraties en routes:

Het hoort bij applicatie . We noemen het Applicatiecache .

php artisan config:cache
php artisan route:cache

Deze twee commando's cachen routes en configuraties.

PAD:

Ze worden altijd opgeslagen in bootstrap/cache/

Hardlopen

php artisan config:clear
php artisan route:clear

Wis alleen de mappen en bestanden in bootstrap/cache/ .

Ze zijn statisch . Ze worden dus alleen gewijzigd als u ze wijzigt.

Voordeel

Als u ze wijzigt, moet u clear en cache ze handmatig.

Nadat u deze routes en configuraties heeft gecacht.

Laravel hoeft de configuraties en routes uit het bestand niet opnieuw te lezen wat IO-tijd kostte.

Bestandssysteemcache en Redis-cache:

Bestandssysteemcache en Redis-cache zijn beide ook cache.

Ze gebruiken echter andere driver om de gegevens op te slaan, betekent waar u de cachegegevens opslaat .

Bestandssysteem PATH:Als u een bestandssysteemstuurprogramma gebruikt. ze worden opgeslagen in storage/framework/cache/

Reids PATH:Gegevensopslag in redis op sleutelwaarde.

Wanneer gebruik je ze?

Toen je ontdekte dat er veel verzoeken om deze code zijn voor het verkrijgen van gegevens. En deze gegevens worden niet zo snel gewijzigd.

Je kunt de cache gebruiken om ze op te slaan, en dan, de volgende keer dat een ander verzoek aan deze api.it wordt gedaan, neem je gewoon gegevens uit de cache.zoals hieronder:

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

Het eerste verzoek haalt de gegevens van de berichten uit de database en slaat deze gegevens vervolgens op in de cache (Reids of bestandssysteem) die na 30 seconden is verlopen.

Volgende verzoek ontvang de gegevens van berichten alleen via de cache. Ze hoeven niet opnieuw in databases te zoeken.

En deze:

use Illuminate\Support\Facades\Redis; 

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

Betekent wanneer mensen localhost:8000/ . aanvragen , aantal bezoeken van gebruikers neemt toe in redis (hoeft niet in de database op te slaan, het kost meer tijd), de volgende keer, wanneer het verzoek om te zoeken bezoeken telt, is het te vinden in redis heel snel.

PS:Gebruik hier Redis Facade, dan worden de gegevens opgeslagen in redis .

Als u redis als cachestuurprogramma gebruikt, Cache::remember() zal gegevens ook in redis opslaan.

Als u Redis Facade gebruikt, kunt u echter veel redis-methoden gebruiken.

Wat is beter?

Ik denk redis is beter dan filesystem .

  1. Omdat redis sla gegevens op in het geheugen en bewaar het bestandssysteem op schijf. Gegevens uit het geheugen lezen is sneller dan schijf.

  2. Bedienen gegevens in Redis is gemakkelijker dan Bestandssysteem. Redis ondersteunt bijvoorbeeld het wissen van alle cache voor een specifieke tag, maar het bestandssysteem kan dat niet [Omdat het bestandssysteem cachegegevens opslaat met de naam van de versleutelde sleutel].

  3. Voor verdeeld server, bestandssysteemcache is een slecht idee. Lagere cache-hitratio.

Eerlijk gezegd zijn er andere stuurprogramma's die kunnen worden gekozen, zoals mongodb .

Trouwens, mijn Engels is niet zo goed, ik hoop dat je het begrijpt.




  1. Totale grootte van documenten in overeenkomende pijplijn overschrijdt de maximale documentgrootte

  2. MongoDb-aggregatie:hoe kan ik een array-1 groeperen op basis van een andere array-2 wanneer ik array-1 en array-2 geef?

  3. MongoDB Voorbeeldoperators

  4. MongoDB deleteMany()