optimiser la destination du cache
This commit is contained in:
parent
291db941b9
commit
d8b70d7ee0
@ -18,6 +18,9 @@ class CachectlApp extends Application {
|
||||
["-r", "--read", "name" => "action", "value" => self::ACTION_READ,
|
||||
"help" => "Afficher le contenu d'un fichier cache",
|
||||
],
|
||||
["-d::", "--data",
|
||||
"help" => "Identifiant de la donnée à afficher",
|
||||
],
|
||||
["-i", "--infos", "name" => "action", "value" => self::ACTION_INFOS,
|
||||
"help" => "Afficher des informations sur le fichier cache",
|
||||
],
|
||||
@ -43,6 +46,8 @@ class CachectlApp extends Application {
|
||||
|
||||
protected $updateAction, $updateDuration;
|
||||
|
||||
protected $data = null;
|
||||
|
||||
function setActionUpdate(int $action, $updateDuration): void {
|
||||
$this->action = self::ACTION_UPDATE;
|
||||
switch ($action) {
|
||||
@ -90,7 +95,7 @@ class CachectlApp extends Application {
|
||||
"duration" => "INF",
|
||||
"override_duration" => true,
|
||||
]);
|
||||
yaml::dump($cache->get());
|
||||
yaml::dump($cache->get($this->data));
|
||||
break;
|
||||
case self::ACTION_INFOS:
|
||||
if ($showSection) msg::section($file);
|
||||
|
8
php/src/cache/CacheData.php
vendored
8
php/src/cache/CacheData.php
vendored
@ -6,7 +6,7 @@ use nulib\php\func;
|
||||
use Traversable;
|
||||
|
||||
/**
|
||||
* Interface CacheData: gestion d'une donnée mise en cache
|
||||
* Class CacheData: gestion d'une donnée mise en cache
|
||||
*/
|
||||
abstract class CacheData {
|
||||
function __construct(?string $name, $compute) {
|
||||
@ -29,6 +29,12 @@ abstract class CacheData {
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* le cache est-il externe? si non, utiliser {@link setDatafile()} pour
|
||||
* spécifier le fichier destination de la valeur
|
||||
*/
|
||||
abstract function isExternal(): bool;
|
||||
|
||||
/** spécifier le chemin du cache à partir du fichier de base */
|
||||
abstract function setDatafile(?string $basefile): void;
|
||||
|
||||
|
15
php/src/cache/CacheFile.php
vendored
15
php/src/cache/CacheFile.php
vendored
@ -217,10 +217,12 @@ class CacheFile extends SharedFile {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function refreshData($data, bool $noCache) {
|
||||
$source = $this->sources[$data] ?? null;
|
||||
protected function refreshData($key, bool $noCache) {
|
||||
$source = $this->sources[$key] ?? null;
|
||||
$external = $source !== null && $source->isExternal();
|
||||
|
||||
$updateMetadata = $this->shouldUpdate($noCache);
|
||||
if ($source === null) $updateData = $this->data === null;
|
||||
if (!$key && !$external) $updateData = $this->data === null;
|
||||
else $updateData = !$source->exists();
|
||||
if (!$this->readonly && ($updateMetadata || $updateData)) {
|
||||
$this->lockWrite();
|
||||
@ -232,11 +234,12 @@ class CacheFile extends SharedFile {
|
||||
$this->data = null;
|
||||
$updateData = true;
|
||||
}
|
||||
if ($source === null) {
|
||||
if (!$key && !$external) {
|
||||
if ($updateData) {
|
||||
# calculer la valeur
|
||||
try {
|
||||
$data = $this->compute();
|
||||
if ($source !== null) $data = $source->compute();
|
||||
else $data = $this->compute();
|
||||
} catch (Exception $e) {
|
||||
# le fichier n'est pas mis à jour, mais ce n'est pas gênant: lors
|
||||
# des futurs appels, l'exception continuera d'être lancée ou la
|
||||
@ -270,7 +273,7 @@ class CacheFile extends SharedFile {
|
||||
$data = null;
|
||||
}
|
||||
}
|
||||
} elseif ($source === null) {
|
||||
} elseif (!$key && !$external) {
|
||||
$data = $this->data;
|
||||
} elseif ($source->exists()) {
|
||||
$data = $source->load();
|
||||
|
4
php/src/cache/CursorCacheData.php
vendored
4
php/src/cache/CursorCacheData.php
vendored
@ -11,6 +11,10 @@ class CursorCacheData extends CacheData {
|
||||
$this->channel = $channel;
|
||||
}
|
||||
|
||||
function isExternal(): bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
function setDatafile(?string $basefile): void {
|
||||
}
|
||||
|
||||
|
4
php/src/cache/DataCacheData.php
vendored
4
php/src/cache/DataCacheData.php
vendored
@ -27,6 +27,10 @@ class DataCacheData extends CacheData {
|
||||
return $data;
|
||||
}
|
||||
|
||||
function isExternal(): bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected string $datafile;
|
||||
|
||||
function setDatafile(?string $basefile): void {
|
||||
|
Loading…
x
Reference in New Issue
Block a user