feat: improve cache including WordPress

This commit is contained in:
2025-09-28 20:38:51 +04:00
parent 57e0a0d35f
commit 1365953b97
2 changed files with 49 additions and 9 deletions
+40 -3
View File
@@ -100,11 +100,20 @@ function callPeerTubeApiCached($endpoint, $params = []) {
// TTL selon le type de contenu // TTL selon le type de contenu
$ttlMap = [ $ttlMap = [
'videos/categories' => 3600, // 1 heure 'videos/categories' => 3600, // 1 heure
'videos' => 300, // 5 minutes 'videos' => 600, // 10 minutes (augmenté)
'search/videos' => 600 // 10 minutes '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 // Essayer le cache d'abord
$cached = $cache->get($endpoint, $params); $cached = $cache->get($endpoint, $params);
@@ -123,6 +132,34 @@ function callPeerTubeApiCached($endpoint, $params = []) {
return $data; 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 // Nettoyage automatique occasionnel
if (rand(1, 100) === 1) { if (rand(1, 100) === 1) {
$GLOBALS['simple_api_cache']->cleanup(); $GLOBALS['simple_api_cache']->cleanup();
+9 -6
View File
@@ -122,13 +122,16 @@ function getWordPressPosts($count = null) {
$count = defined('WORDPRESS_POSTS_COUNT') ? WORDPRESS_POSTS_COUNT : 6; $count = defined('WORDPRESS_POSTS_COUNT') ? WORDPRESS_POSTS_COUNT : 6;
} }
// Récupérer les posts via l'API WordPress REST // Utiliser le cache pour les posts WordPress
$posts = callWordPressApi('posts', [ return callApiCached('wp-posts-' . $count, function() use ($count) {
'per_page' => $count, // Récupérer les posts via l'API WordPress REST
'_embed' => 'true' // Inclure les médias embarqués (featured image) $posts = callWordPressApi('posts', [
]); 'per_page' => $count,
'_embed' => 'true' // Inclure les médias embarqués (featured image)
]);
return formatWordPressPosts($posts); return formatWordPressPosts($posts);
}, 900); // 15 minutes de cache
} }
/** /**