feat: improve cache including WordPress
This commit is contained in:
@@ -100,11 +100,20 @@ function callPeerTubeApiCached($endpoint, $params = []) {
|
||||
// TTL selon le type de contenu
|
||||
$ttlMap = [
|
||||
'videos/categories' => 3600, // 1 heure
|
||||
'videos' => 300, // 5 minutes
|
||||
'search/videos' => 600 // 10 minutes
|
||||
'videos' => 600, // 10 minutes (augmenté)
|
||||
'search/videos' => 600, // 10 minutes
|
||||
'wp-posts' => 900, // 15 minutes pour WordPress
|
||||
'accounts' => 300 // 5 minutes pour live streams
|
||||
];
|
||||
|
||||
$ttl = $ttlMap[$endpoint] ?? 300;
|
||||
// TTL dynamique selon l'endpoint
|
||||
$ttl = 300; // Défaut 5 minutes
|
||||
foreach ($ttlMap as $pattern => $time) {
|
||||
if (strpos($endpoint, $pattern) !== false) {
|
||||
$ttl = $time;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Essayer le cache d'abord
|
||||
$cached = $cache->get($endpoint, $params);
|
||||
@@ -123,6 +132,34 @@ function callPeerTubeApiCached($endpoint, $params = []) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cache générique pour tout type d'API
|
||||
*/
|
||||
function callApiCached($cacheKey, $callable, $ttl = 900) {
|
||||
$cache = $GLOBALS['simple_api_cache'];
|
||||
|
||||
// Essayer le cache d'abord
|
||||
$cached = $cache->get($cacheKey, []);
|
||||
if ($cached !== null) {
|
||||
return $cached;
|
||||
}
|
||||
|
||||
// Appeler la fonction fournie
|
||||
try {
|
||||
$data = call_user_func($callable);
|
||||
} catch (Exception $e) {
|
||||
error_log('API call failed for ' . $cacheKey . ': ' . $e->getMessage());
|
||||
return [];
|
||||
}
|
||||
|
||||
// Mettre en cache si on a des données
|
||||
if (!empty($data)) {
|
||||
$cache->set($cacheKey, [], $data, $ttl);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
// Nettoyage automatique occasionnel
|
||||
if (rand(1, 100) === 1) {
|
||||
$GLOBALS['simple_api_cache']->cleanup();
|
||||
|
||||
Reference in New Issue
Block a user