Только-только начал использовать Redis. Сделал много-чего, что кэшируется. Вроде как полагается, ключ-значение в redis есть, выдаем это, или берем из БД, записываем в redis и выдаем. Использую
Predis как оболочку для PHP. Но вот не могу сделать так, чтобы redis-часть игнорировалась, если redis на сервере отсутствует (он пока отсутствует на основном сервере, но обновить код скоро надо).
Predis\Autoloader::register();
self::$redis = new Predis\Client([
'scheme' => 'tcp',
'host' => REDIS_HOST ?: '127.0.0.1',
'port' => REDIS_PORT ?: '6379',
]);
try {
self::$redis->ping();
self::$available = true;
} catch (\Exception $e) {
self::$available = false;
}
В итоге получаю ошибку всегда
Fatal error: in C:\OSPanel\domains\gene.com\vendor\predis\predis\src\Connection\AbstractConnection.php on line 155
На всякий случай положил все в свою оболочку для работы с ней.
Полный класс тут
namespace Superior;
use \Predis as Predis;
class Redis {
static public $redis;
static private $available = false;
static public function k($key) {
if (self::$redis) {
return self::$redis->get($key);
}
return false;
}
static public function ss($key, $value, $time = 604800) {
if (self::$redis) {
self::$redis->set($key, $value);
self::$redis->expire($key, $time);
}
}
static public function SetUp() {
Predis\Autoloader::register();
self::$redis = new Predis\Client([
'scheme' => 'tcp',
'host' => REDIS_HOST ?: '127.0.0.1',
'port' => REDIS_PORT ?: '6379',
]);
try {
self::$redis->ping();
self::$available = true;
} catch (\Exception $e) {
self::$available = false;
}
}
}