Files
wevads-platform/app/helpers/Cache.php
2026-02-26 04:53:11 +01:00

122 lines
3.3 KiB
PHP

<?php
/**
* WEVADS Cache System (Redis)
*
* Usage:
* Cache::set('key', $value, 3600); // 1 heure
* $value = Cache::get('key');
* Cache::delete('key');
* Cache::flush();
*/
class Cache {
private static $redis = null;
private static $prefix = 'wevads:';
private static $enabled = true;
private static function connect() {
if (self::$redis === null && self::$enabled) {
try {
self::$redis = new Redis();
self::$redis->connect('127.0.0.1', 6379);
self::$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_JSON);
} catch (Exception $e) {
self::$enabled = false;
error_log("Redis connection failed: " . $e->getMessage());
return null;
}
}
return self::$redis;
}
public static function set($key, $value, $ttl = 3600) {
$redis = self::connect();
if (!$redis) return false;
try {
return $redis->setex(self::$prefix . $key, $ttl, json_encode($value));
} catch (Exception $e) {
return false;
}
}
public static function get($key, $default = null) {
$redis = self::connect();
if (!$redis) return $default;
try {
$value = $redis->get(self::$prefix . $key);
return $value !== false ? json_decode($value, true) : $default;
} catch (Exception $e) {
return $default;
}
}
public static function delete($key) {
$redis = self::connect();
if (!$redis) return false;
try {
return $redis->del(self::$prefix . $key);
} catch (Exception $e) {
return false;
}
}
public static function exists($key) {
$redis = self::connect();
if (!$redis) return false;
try {
return $redis->exists(self::$prefix . $key);
} catch (Exception $e) {
return false;
}
}
public static function flush() {
$redis = self::connect();
if (!$redis) return false;
try {
$keys = $redis->keys(self::$prefix . '*');
foreach ($keys as $key) {
$redis->del($key);
}
return true;
} catch (Exception $e) {
return false;
}
}
// Cache avec callback (lazy loading)
public static function remember($key, $ttl, callable $callback) {
$value = self::get($key);
if ($value !== null) {
return $value;
}
$value = $callback();
self::set($key, $value, $ttl);
return $value;
}
// Stats
public static function stats() {
$redis = self::connect();
if (!$redis) return ['enabled' => false];
try {
$info = $redis->info();
return [
'enabled' => true,
'used_memory' => $info['used_memory_human'] ?? 'N/A',
'connected_clients' => $info['connected_clients'] ?? 0,
'total_keys' => count($redis->keys(self::$prefix . '*'))
];
} catch (Exception $e) {
return ['enabled' => false, 'error' => $e->getMessage()];
}
}
}