feat: improve cache including WordPress
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -122,6 +122,8 @@ function getWordPressPosts($count = null) {
|
|||||||
$count = defined('WORDPRESS_POSTS_COUNT') ? WORDPRESS_POSTS_COUNT : 6;
|
$count = defined('WORDPRESS_POSTS_COUNT') ? WORDPRESS_POSTS_COUNT : 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Utiliser le cache pour les posts WordPress
|
||||||
|
return callApiCached('wp-posts-' . $count, function() use ($count) {
|
||||||
// Récupérer les posts via l'API WordPress REST
|
// Récupérer les posts via l'API WordPress REST
|
||||||
$posts = callWordPressApi('posts', [
|
$posts = callWordPressApi('posts', [
|
||||||
'per_page' => $count,
|
'per_page' => $count,
|
||||||
@@ -129,6 +131,7 @@ function getWordPressPosts($count = null) {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
return formatWordPressPosts($posts);
|
return formatWordPressPosts($posts);
|
||||||
|
}, 900); // 15 minutes de cache
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user