The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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 Cachdatei

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.189

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2020 Frank Seitz

LICENSE

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