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,
|
["-r", "--read", "name" => "action", "value" => self::ACTION_READ,
|
||||||
"help" => "Afficher le contenu d'un fichier cache",
|
"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,
|
["-i", "--infos", "name" => "action", "value" => self::ACTION_INFOS,
|
||||||
"help" => "Afficher des informations sur le fichier cache",
|
"help" => "Afficher des informations sur le fichier cache",
|
||||||
],
|
],
|
||||||
@ -43,6 +46,8 @@ class CachectlApp extends Application {
|
|||||||
|
|
||||||
protected $updateAction, $updateDuration;
|
protected $updateAction, $updateDuration;
|
||||||
|
|
||||||
|
protected $data = null;
|
||||||
|
|
||||||
function setActionUpdate(int $action, $updateDuration): void {
|
function setActionUpdate(int $action, $updateDuration): void {
|
||||||
$this->action = self::ACTION_UPDATE;
|
$this->action = self::ACTION_UPDATE;
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
@ -90,7 +95,7 @@ class CachectlApp extends Application {
|
|||||||
"duration" => "INF",
|
"duration" => "INF",
|
||||||
"override_duration" => true,
|
"override_duration" => true,
|
||||||
]);
|
]);
|
||||||
yaml::dump($cache->get());
|
yaml::dump($cache->get($this->data));
|
||||||
break;
|
break;
|
||||||
case self::ACTION_INFOS:
|
case self::ACTION_INFOS:
|
||||||
if ($showSection) msg::section($file);
|
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;
|
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 {
|
abstract class CacheData {
|
||||||
function __construct(?string $name, $compute) {
|
function __construct(?string $name, $compute) {
|
||||||
@ -29,6 +29,12 @@ abstract class CacheData {
|
|||||||
return $data;
|
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 */
|
/** spécifier le chemin du cache à partir du fichier de base */
|
||||||
abstract function setDatafile(?string $basefile): void;
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function refreshData($data, bool $noCache) {
|
protected function refreshData($key, bool $noCache) {
|
||||||
$source = $this->sources[$data] ?? null;
|
$source = $this->sources[$key] ?? null;
|
||||||
|
$external = $source !== null && $source->isExternal();
|
||||||
|
|
||||||
$updateMetadata = $this->shouldUpdate($noCache);
|
$updateMetadata = $this->shouldUpdate($noCache);
|
||||||
if ($source === null) $updateData = $this->data === null;
|
if (!$key && !$external) $updateData = $this->data === null;
|
||||||
else $updateData = !$source->exists();
|
else $updateData = !$source->exists();
|
||||||
if (!$this->readonly && ($updateMetadata || $updateData)) {
|
if (!$this->readonly && ($updateMetadata || $updateData)) {
|
||||||
$this->lockWrite();
|
$this->lockWrite();
|
||||||
@ -232,11 +234,12 @@ class CacheFile extends SharedFile {
|
|||||||
$this->data = null;
|
$this->data = null;
|
||||||
$updateData = true;
|
$updateData = true;
|
||||||
}
|
}
|
||||||
if ($source === null) {
|
if (!$key && !$external) {
|
||||||
if ($updateData) {
|
if ($updateData) {
|
||||||
# calculer la valeur
|
# calculer la valeur
|
||||||
try {
|
try {
|
||||||
$data = $this->compute();
|
if ($source !== null) $data = $source->compute();
|
||||||
|
else $data = $this->compute();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
# le fichier n'est pas mis à jour, mais ce n'est pas gênant: lors
|
# 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
|
# des futurs appels, l'exception continuera d'être lancée ou la
|
||||||
@ -270,7 +273,7 @@ class CacheFile extends SharedFile {
|
|||||||
$data = null;
|
$data = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif ($source === null) {
|
} elseif (!$key && !$external) {
|
||||||
$data = $this->data;
|
$data = $this->data;
|
||||||
} elseif ($source->exists()) {
|
} elseif ($source->exists()) {
|
||||||
$data = $source->load();
|
$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;
|
$this->channel = $channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isExternal(): bool {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function setDatafile(?string $basefile): void {
|
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;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isExternal(): bool {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected string $datafile;
|
protected string $datafile;
|
||||||
|
|
||||||
function setDatafile(?string $basefile): void {
|
function setDatafile(?string $basefile): void {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user