Popraw obsługę błędów i optymalizację połączeń z Redis w różnych klasach
This commit is contained in:
BIN
autoload/.DS_Store
vendored
BIN
autoload/.DS_Store
vendored
Binary file not shown.
@@ -1,30 +1,54 @@
|
||||
<?
|
||||
class RedisConnection {
|
||||
class RedisConnection
|
||||
{
|
||||
private static $instance = null;
|
||||
private $redis;
|
||||
|
||||
private function __construct() {
|
||||
private function __construct()
|
||||
{
|
||||
global $config;
|
||||
|
||||
$this -> redis = new \Redis();
|
||||
if ( !$this -> redis -> connect( $config['redis']['host'], $config['redis']['port'] ) ) {
|
||||
throw new Exception("Nie udało się połączyć z serwerem Redis.");
|
||||
$this->redis = new \Redis();
|
||||
|
||||
try
|
||||
{
|
||||
// Próba połączenia z serwerem Redis
|
||||
if (!$this->redis->connect($config['redis']['host'], $config['redis']['port']))
|
||||
{
|
||||
// Logowanie błędu lub inna forma obsługi, zamiast rzucania wyjątku
|
||||
error_log("Nie udało się połączyć z serwerem Redis.");
|
||||
$this->redis = null; // Ustawienie na null, aby uniknąć błędów w przyszłości
|
||||
return; // Wyjście z konstruktora, nie kontynuując autoryzacji
|
||||
}
|
||||
|
||||
// Autentykacja za pomocą hasła
|
||||
if ( !$this -> redis -> auth( $config['redis']['password'] ) ) {
|
||||
|
||||
// Próba autoryzacji
|
||||
if (!$this->redis->auth($config['redis']['password']))
|
||||
{
|
||||
error_log("Autoryzacja do serwera Redis nie powiodła się.");
|
||||
$this->redis = null; // Ustawienie na null, aby uniknąć błędów w przyszłości
|
||||
return; // Wyjście z konstruktora
|
||||
}
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
// Obsługa innych potencjalnych wyjątków
|
||||
error_log("Błąd podczas połączenia z Redis: " . $e->getMessage());
|
||||
$this->redis = null; // Ustawienie na null, aby uniknąć błędów w przyszłości
|
||||
}
|
||||
}
|
||||
|
||||
public static function getInstance() {
|
||||
if ( self::$instance === null ) {
|
||||
|
||||
public static function getInstance()
|
||||
{
|
||||
if (self::$instance === null)
|
||||
{
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public function getConnection() {
|
||||
public function getConnection()
|
||||
{
|
||||
return $this->redis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
autoload/front/.DS_Store
vendored
BIN
autoload/front/.DS_Store
vendored
Binary file not shown.
@@ -362,7 +362,8 @@ class ShopBasket
|
||||
\S::set_session( 'ekomi-purchase', true );
|
||||
|
||||
$redis = \RedisConnection::getInstance() -> getConnection();
|
||||
$redis -> flushAll();
|
||||
if ( $redis )
|
||||
$redis -> flushAll();
|
||||
|
||||
header( 'Location: /zamowienie/' . \front\factory\ShopOrder::order_hash( $order_id ) );
|
||||
exit;
|
||||
|
||||
@@ -112,41 +112,50 @@ class Product implements \ArrayAccess
|
||||
* @param string $permutation_hash The permutation hash of the product.
|
||||
* @return \shop\Product The product object.
|
||||
*/
|
||||
public static function getFromCache( $product_id, $lang_id, $permutation_hash = null )
|
||||
public static function getFromCache($product_id, $lang_id, $permutation_hash = null)
|
||||
{
|
||||
// Check if Redis extension is loaded
|
||||
if ( class_exists( 'Redis' ) )
|
||||
if (class_exists('Redis'))
|
||||
{
|
||||
try
|
||||
{
|
||||
// Get the Redis connection instance
|
||||
$redis = \RedisConnection::getInstance() -> getConnection();
|
||||
$redis = \RedisConnection::getInstance()->getConnection();
|
||||
|
||||
// Try to retrieve the serialized product object from cache
|
||||
$objectData = $redis -> get( "shop\product:$product_id:$lang_id:$permutation_hash" );
|
||||
|
||||
if ( !$objectData )
|
||||
// Check if Redis connection is valid
|
||||
if ($redis)
|
||||
{
|
||||
// Product not found in cache, create a new instance and store it in cache
|
||||
$object = new self( $product_id, $lang_id, $permutation_hash );
|
||||
$redis->setex( "shop\product:$product_id:$lang_id:$permutation_hash", 60 * 60 * 24, serialize( $object ) );
|
||||
// Try to retrieve the serialized product object from cache
|
||||
$objectData = $redis->get("shop\product:$product_id:$lang_id:$permutation_hash");
|
||||
|
||||
if (!$objectData)
|
||||
{
|
||||
// Product not found in cache, create a new instance and store it in cache
|
||||
$object = new self($product_id, $lang_id, $permutation_hash);
|
||||
$redis->setex("shop\product:$product_id:$lang_id:$permutation_hash", 60 * 60 * 24, serialize($object));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Product found in cache, unserialize it
|
||||
$object = unserialize($objectData);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Product found in cache, unserialize it
|
||||
$object = unserialize( $objectData );
|
||||
// Redis connection failed, create a new instance
|
||||
$object = new self($product_id, $lang_id, $permutation_hash);
|
||||
}
|
||||
}
|
||||
catch ( \Exception $e )
|
||||
catch (\Exception $e)
|
||||
{
|
||||
// Log the exception if needed
|
||||
$object = new self( $product_id, $lang_id, $permutation_hash );
|
||||
$object = new self($product_id, $lang_id, $permutation_hash);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Redis extension not loaded, create a new instance
|
||||
$object = new self( $product_id, $lang_id, $permutation_hash );
|
||||
$object = new self($product_id, $lang_id, $permutation_hash);
|
||||
}
|
||||
|
||||
return $object;
|
||||
|
||||
@@ -20,16 +20,25 @@ class ProductCustomField implements \ArrayAccess
|
||||
try
|
||||
{
|
||||
$redis = \RedisConnection::getInstance() -> getConnection();
|
||||
$objectData = $redis -> get( "shop\ProductCustomField:$custom_field_id" );
|
||||
|
||||
if ( !$objectData )
|
||||
if ( $redis )
|
||||
{
|
||||
$object = new self( $custom_field_id );
|
||||
$redis -> setex( "shop\ProductCustomField:$custom_field_id", 60 * 60 * 24, serialize( $object ) );
|
||||
$objectData = $redis -> get( "shop\ProductCustomField:$custom_field_id" );
|
||||
|
||||
if ( !$objectData )
|
||||
{
|
||||
$object = new self( $custom_field_id );
|
||||
$redis -> setex( "shop\ProductCustomField:$custom_field_id", 60 * 60 * 24, serialize( $object ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$object = unserialize( $objectData );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$object = unserialize( $objectData );
|
||||
// Log the error if needed
|
||||
$object = new self( $custom_field_id );
|
||||
}
|
||||
}
|
||||
catch ( \Exception $e )
|
||||
|
||||
Reference in New Issue
Block a user