122 lines
3.3 KiB
PHP
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()];
|
|
}
|
|
}
|
|
}
|