in src/cart/src/cartstore/ValkeyCartStore.cs [72:120]
private void EnsureRedisConnected()
{
if (_isRedisConnectionOpened)
{
return;
}
// Connection is closed or failed - open a new one but only at the first thread
lock (_locker)
{
if (_isRedisConnectionOpened)
{
return;
}
_logger.LogDebug("Connecting to Redis: {_connectionString}", _connectionString);
_redis = ConnectionMultiplexer.Connect(_redisConnectionOptions);
if (_redis == null || !_redis.IsConnected)
{
_logger.LogError("Wasn't able to connect to redis");
// We weren't able to connect to Redis despite some retries with exponential backoff.
throw new ApplicationException("Wasn't able to connect to redis");
}
_logger.LogInformation("Successfully connected to Redis");
var cache = _redis.GetDatabase();
_logger.LogDebug("Performing small test");
cache.StringSet("cart", "OK" );
object res = cache.StringGet("cart");
_logger.LogDebug("Small test result: {res}", res);
_redis.InternalError += (_, e) => { Console.WriteLine(e.Exception); };
_redis.ConnectionRestored += (_, _) =>
{
_isRedisConnectionOpened = true;
_logger.LogInformation("Connection to redis was restored successfully.");
};
_redis.ConnectionFailed += (_, _) =>
{
_logger.LogInformation("Connection failed. Disposing the object");
_isRedisConnectionOpened = false;
};
_isRedisConnectionOpened = true;
}
}