* @copyright Copyright 2020-2023 © Teamwant Mateusz Szymański All right reserved * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * @category Teamwant * @package Teamwant */ namespace Teamwant\Prestashop17\Redis\Classes\Cache; use InvalidArgumentException; use Predis\Client; use Predis\Connection\ConnectionException; use Predis\Response\ServerException; use Throwable; class Redis extends CacheRedis { /** * @var string */ const REDIS_HEALTHCHECK_KEY = "TW_REDIS_HEALTHCHECKKEY"; public static function testConnection($scheme, $host, $port, $alias = null, $username = null, $password = null, $database = null) { if (class_exists('\Predis\Client')) { $row = [ 'scheme' => $scheme, 'host' => $host, 'port' => $port, 'alias' => 'first-node' ]; if ($alias) { $row['alias'] = $alias; } if ($username) { $row['username'] = $username; } if ($password) { $row['password'] = $password; } if ($database) { $row['database'] = (int)$database; } try { if ($row['scheme'] === 'unix') { $row['path'] = $row['host']; unset($row['host']); } $client = new Client($row); $client->connect(); if ($client->isConnected()) { $uniqid = uniqid(); $result = $client->set($uniqid, serialize(['k' => 'v']), 'ex', strtotime('now +1min')); if ((string)$result === 'OK') { return true; } } } catch (ConnectionException $e) { return false; } catch (InvalidArgumentException $e) { return false; } catch (ServerException $e) { return false; } catch (Throwable $e) { return false; } } return false; } public function delete($key) { if (!$this->is_connected) { return false; } if ($key === '*') { $this->_flush(); } else { $this->_delete($key); } return true; } public function flush() { if (!$this->is_connected) { return false; } return $this->_flush(); } public function set($key, $value, $ttl = 0) { if (!$this->is_connected) { return false; } return $this->_set($key, $value, $ttl); } public function get($key) { if (!$this->is_connected) { return false; } return $this->_get($key); } public function exists($key) { if (!$this->is_connected) { return false; } return $this->_exists($key); } }