The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Quiq::Cache - Cache Datenstruktur in Datei

BASE CLASS

Quiq::Hash

SYNOPSIS

use Quiq::Cache;

sub ... {
    ...

    # Instantiiere Cache

    my $c = Quiq::Cache->new($cacheDir,$duration,\@key)
        -inactive => $condition,
    );
    if (my $ref = $c->read) {
        return $ref; # liefere Datenstruktur aus Cache
    }

    # Baue Datenstruktur auf

    ...

    $c->write($ref); # schreibe Datenstuktur auf Cache

    return $ref; # liefere Datenstruktur
}

DESCRIPTION

Ein Objekt der Klasse verwaltet einen Cache. Der Cache ist ein Verzeichnis ($cacheDir) im Dateisystem. Eine Cachedatei speichert eine beliebige Datenstruktur. Diese wird von Storable geschrieben und gelesen. Die Datenstruktur darf ein Objekt (also geblesst) oder zirkulär sein. Die Cachdatei ist $duration Sekunden gültig. Danach ist sie ungültig und wird neu berechnet.

Die Aufrufe read() und write() haben keine Wirkung, wenn $condition wahr ist. Damit kann das Caching für bestimmte Fälle abgschaltet werden.

Das Array @key besteht aus ein oder mehr einzelnen Werten, die zusammen den Schlüssel für die Cachdatei bilden. Der interne Schüssel ist der MD5-Hash über diesen Werten. Dieser bildet den Namen der Cachedatei.

EXAMPLE

Cachen einer HTML-Seite, die von einem einzigen Parameter $day abhängt:

my $day = $self->param('day') // $today;

my $c = Quiq::Cache->new('~/var/html-cache',43_200,[$day],
    -inactive => $day eq $today,
);
if (my $ref = $c->read) {
    $self->render(text=>$$ref);
    return;
}

my $html = ...HTML erzeugen...

$c->write(\$html);

METHODS

Klassenmethoden

new() - Konstruktor

Synopsis

$c = $class->new($dir,$duration,\@key,@opt);

Arguments

$dir

Verzeichnis, in dem die Cachdatei gespeichert wird.

$duration

Zeitdauer in Sekunden, die die Cachdatei ab ihrer Erzeugung gültig ist.

@key

Die zur Bildung des Hash herangezogenen Werte.

Options

-inactive => $bool (default: 0)

Wenn wahr, ist der Cache inaktiv, d.h. $c->read() liefert immer undef und $c->write() hat keine Wirkung.

-prefix => $str (Default: '')

Prefix, der der Cachedatei vorangestellt wird.

Returns

Cache-Objekt

Description

Instantiiere ein Cache-Objekt und liefere eine Referenz auf dieses Objekt zurück.

Objektmethoden

read() - Lies Daten aus Cachedatei

Synopsis

$ref = $c->read;

Returns

Referenz auf Datenstruktur oder undef

Description

Liefere eine Referenz auf die Datenstruktur in der Cachdatei oder undef. Wir liefern undef, wenn

  • der Cache inaktiv ist

  • die Cachdatei nicht existiert

  • die Cachdatei exisiert, aber älter ist als die Gültigkeitsdauer

write() - Schreibe Daten auf Cachdatei

Synopsis

$c->write($ref);

Arguments

$ref

Referenz auf Datenstruktur.

Description

Schreibe Datenstruktur $ref auf die Cachedatei.

VERSION

1.220

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.