Menu

Laravel caching

Jas

De avatar van Jas
  • Niet autistisch
  • Donateur
Geplaatst 1 week, 2 dagen geleden Jas

Voor een applicatie dat ik momenteel aan het ontwikkelen ben wil ik gaan cachen. Ik wil bij het cachen response tijden van netwerken opslaan en ophalen elke minuut.

Momenteel heb ik een artisan command aangemaakt welk een ping request uitvoert naar al mijn geregistreerde IP adressen en daarvan de item opslaat in mijn cache. Als item store ik mijn nodeid als key, responetijd als value en een verlooptijd van 60 seconden. Vervolgens heb ik mijn artisan command verwerkt in de Kernel van Laravel. Waarbij ik als schedule mijn command elk minuut uitvoer.

In mijn cronjob heb ik verwerkt dat het naar mijn artisan omgeving moet gaan om vervolgens de command php artisan schedule:run uit te kunnen voeren.

Het gekke is dat mijn items niet worden gestored in mijn cache migration, maar ik het wel alsnog kan ophalen. Mijn probleem is dat bij het ophalen van een value dit altijd hetzelfde is.

Heeft iemand enig idee?

Artisan command

public function handle()
    {
        $nodes = Nodes::all();
        foreach($nodes as $node) {
            exec("ping -c 1 " . $node->ipadres . " | head -n 2 | tail -n 1 | awk '{print $7}'", $ping_time);
            Cache::put($node->id, $ping_time[0], 60);
        }
    }

Ophalen van cache items

    public function index()
    {
        $nodes = Nodes::all();
        foreach($nodes as $node) {
            if (Cache::has($node->id)) {
                $value = Cache::get($node->id);
            } else {
                $value = 'Onbekend';
            }
        }

        return view('home', compact('nodes','value'));
    }

Cronjob:
* * * * * cd /var/www/html/project && php artisan schedule:run >> /dev/null

Probleem:

127.0.0.1 is 0.016ms (Kan)
Random IP welk ICMP uberhaupt blokkeert is ook 0.016ms (??)

Lege cache table

He who says he can and he who says he can't are both usually right

Navi

De avatar van Navi
  • Ontwikkelaar🙂
  • Ontwikkelaar
Geplaatst 1 week, 2 dagen geleden

Ik denk dat ergens de cache nog op file staat, of in de cache zelf waardoor die de laatste file ophaalt

Jas

De avatar van Jas
  • Niet autistisch
  • Donateur
Geplaatst 1 week, 2 dagen geleden Jas

Navi
Ik denk dat ergens de cache nog op file staat, of in de cache zelf waardoor die de laatste file ophaalt

Inderdaad! Vergeten om te checken, mijn cache werd inderdaad in een file opgeslagen, wat natuurlijk logisch sinds dat default is in de cache configuratie. Ik heb in mijn .env aangegeven dat het gaat om een database, nu even checken of het werkt🙂

He who says he can and he who says he can't are both usually right

Jas

De avatar van Jas
  • Niet autistisch
  • Donateur
Geplaatst 1 week, 2 dagen geleden Jas

Blijkbaar lukt het mij niet om de key een eigen naam te geven, de item key is continu laravel_cache{nodeid} etc.

Terwijl ik specifiek aangeef in mijn artisan command dat bij het toevoegen van de item, de key mijn nodeid zou moeten zijn. Maar dat doet tie dus direct achter.

Een inefficiënte omweg maken werkt ook niet echt hmmm.

if (Cache::has('laravel_cache' . $node->id)) {
  $value = Cache::get('laravel_cache' . $node->id);
} else {
  $value = 'Onbekend';
}

En laravel_cache1 is gek genoeg ook null?

dd($value = Cache::get('laravel_cache1'));

He who says he can and he who says he can't are both usually right

Robin

De avatar van Robin
  • Software engineer
  • Ontwikkelaar
Geplaatst 1 week, 1 dag geleden

dd(Cache::get('1')); << dat zal waarschijnlijk wel het juiste geven van waarde, niet?

Favorite line of code: try { /*BLAH*/ } catch (Exception) { /* DONT TELL THE USERS, WE SCREWED UP */ }

Jas

De avatar van Jas
  • Niet autistisch
  • Donateur
Geplaatst 1 week, 1 dag geleden

Robin
dd(Cache::get('1')); << dat zal waarschijnlijk wel het juiste geven van waarde, niet?

Nog steeds null.

He who says he can and he who says he can't are both usually right

Robin

De avatar van Robin
  • Software engineer
  • Ontwikkelaar
Geplaatst 1 week, 1 dag geleden

Je cache prefix kan ingevuld zijn op laravel_cache, valideer dat eens?

Favorite line of code: try { /*BLAH*/ } catch (Exception) { /* DONT TELL THE USERS, WE SCREWED UP */ }

Jas

De avatar van Jas
  • Niet autistisch
  • Donateur
Geplaatst 1 week, 1 dag geleden

Oplossing was de prefix weglaten zodat de item key alleen bestaat uit een id. Op deze manier is het me gelukt om de value aan te roepen met Cache::get(1);.

He who says he can and he who says he can't are both usually right

Klaas

De avatar van Klaas
  • Geregistreerd lid
  • Geregistreerd
Geplaatst 6 dagen, 12 uur geleden

Je kan ook een prefix usen maar dan moet je dat overal goed doen🙂

Wouter

De avatar van Wouter
  • Mijn gebruikerstitel.
  • Donateur
Geplaatst 6 dagen, 10 uur geleden Wouter

Beetje offtopic; maar hoezo wil je dit cachen? Cachen is bedoelt om dingen sneller te maken, maar hier ga je gewoon data opslaan in je database dat je (lijkt me) beter gewoon op een volwaardige manier kan opslaan. Beetje misbruiken van de cache feature, of niet?

Je kan dit in je nodes table zelf opslaan, maar ook in een aparte table zodat je ook history kan bijhouden.

Beetje ontopic; dat je hem met Cache::get(1) kan ophalen klopt ook. Je schrijft hem namelijk ook weg als Cache::set(1, x). Dat Laravel er wat voorzet, is irrelevant in deze. Ik zou er dan lekker iets als 'node-ping-' . $node->id van maken.

Jas

De avatar van Jas
  • Niet autistisch
  • Donateur
Geplaatst 6 dagen, 7 uur geleden Jas

Klaas
Je kan ook een prefix usen maar dan moet je dat overal goed doen🙂

Wouter
Beetje ontopic; dat je hem met Cache::get(1) kan ophalen klopt ook. Je schrijft hem namelijk ook weg als Cache::set(1, x). Dat Laravel er wat voorzet, is irrelevant in deze. Ik zou er dan lekker iets als 'node-ping-' . $node->id van maken.

Dat werkte dus niet want dd(Cache::get('laravel_cache1')); was null, maar goed. Mijn node id is de key van mijn cache item en het werkt na wat aanpassingen bij het verwerken van mijn ICMP request🙂

He who says he can and he who says he can't are both usually right

Sevvlor

De avatar van Sevvlor
  • ᕕ( ᐛ )ᕗ
  • Beheer
Geplaatst 6 dagen, 7 uur geleden

Beetje offtopic; maar hoezo wil je dit cachen? Cachen is bedoelt om dingen sneller te maken, maar hier ga je gewoon data opslaan

Het heet cache maar hje kan het ook gebruiken als tijdelijke opslag van data. Dat is immers een cache ook. Als je een externe partij benaderd die langzaam reageert kan je dat opslaan in de cachelaag. Ik zie niet in waarom je dit niet in de cachelaag kan fietsen. Je hebt immers geen history nodig. Ik zie niet in waarom het 'fout' zou zijn.

PS: Met die logica zou Cache::increment('key'); ook fout zijn.

https://laravel.com/docs/5.8/cache#retrieving-items-from-the-cache

Clippit should work on the suicidal hot line: "It seems you want to die, would you like a list of ways to die?"

Snel reageren

Flag Content
Processing...

Geef een duidelijke reden waarom een administrator naar deze post moet kijken