【问题标题】:Laravel: How to Check Redis Availability?Laravel:如何检查 Redis 可用性?
【发布时间】:2018-01-16 21:11:46
【问题描述】:

如何在 Laravel 5.4 中检查 Redis 连接的可用性。我尝试了下面的代码,但 ping 行出现异常。如果 Redis 未连接,我该怎么做才能避免异常?

无法建立连接,因为目标机器主动 拒绝了。 [tcp://127.0.0.1:6379]

use Redis;

class SocketController extends Controller
{
    public function sendMessage(){
        $redis = Redis::connection();

        if($redis->ping()){
            print_r("expression");
        }
        else{
            print_r("expression2");
        }
    }
}

也试过这个:

$redis = Redis::connection();
        try{
            $redis->ping();
        } catch (Exception $e){
            $e->getMessage();
        }

但无法捕获异常

【问题讨论】:

    标签: redis laravel-5.4


    【解决方案1】:

    如果你使用的是 predis ,那么它会抛出 Predis\Connection\ConnectionException

    从服务器读取行时出错。 [tcp://127.0.0.1:6379]

    所以抓住那个异常,你会得到你的 redis 是否连接。

    use Illuminate\Support\Facades\Redis;
    
        public function redis_test(Request $request){
        try{
            $redis=Redis::connect('127.0.0.1',3306);
            return response('redis working');
        }catch(\Predis\Connection\ConnectionException $e){
            return response('error connection redis');
        }
    

    【讨论】:

      【解决方案2】:
      <?php
      
      namespace App\Helpers;
      
      use Illuminate\Support\Facades\DB;
      use Illuminate\Support\Facades\Redis;
      
      class ConnectionChecker
      {
          public static function isDatabaseReady($connection = null)
          {
              $isReady = true;
              try {
                  DB::connection($connection)->getPdo();
              } catch (\Exception $e) {
                  $isReady = false;
              }
      
              return $isReady;
          }
      
          public static function isRedisReady($connection = null)
          {
              $isReady = true;
              try {
                  $redis = Redis::connection($connection);
                  $redis->connect();
                  $redis->disconnect();
              } catch (\Exception $e) {
                  $isReady = false;
              }
      
              return $isReady;
          }
      }  
      

      我创建了一个帮助类来检查 redis 和 db 连接

      【讨论】:

      • 对于 $redis-&gt;connect 方法,我必须提供 HOST + PORT,否则效果很好。
      【解决方案3】:

      在您的构造函数中,您可以像这样检查 redis 状态连接:

      /**
       * RedisDirectGeoProximity constructor.
       * @throws RedisConnectionException
       */
      public function __construct()
      {
          try
          {
              $this->redisConnection = Redis::connection('default');
          }
          catch ( Exception $e )
          {
              throw new RedisConnectionException([
                  'message' => trans('messages.redis.fail'),
                  'code' => ApiErrorCodes::REDIS_CONNECTION_FAIL
              ]);
          }
      }
      

      在你的例外情况下:

      namespace App\Exceptions\Redis;
      
      /**
       * Class RedisConnectionException
       * @package App\Exceptions\Redis
       */
       class RedisConnectionException extends \Exception
       {
           /**
            * RedisConnectionException constructor.
            * @param array $options
            */
            public function __construct(array $options = [])
            {
                parent::__construct($options);
            }
       }
      

      【讨论】:

        【解决方案4】:

        确保安装了redis

        $ sudo apt-get update 
        $ sudo apt-get upgrade
        $ sudo apt-get  install redis-server
        

        要测试您的服务是否正常运行,请使用命令行客户端连接到 Redis 服务器:

        redis-cli
        

        在随后的提示中,输入以下内容来测试连通性:

        ping
        

        你应该看到:

        输出

        PONG
        

        安装 Laravel 依赖项

        composer require predis/predis
        

        https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04

        https://askubuntu.com/questions/868848/how-to-install-redis-on-ubuntu-16-04

        【讨论】:

        • 是的,我可以在 redis-cli 中执行 ping 操作,我也可以通过 laravel 与 redis 连接,但我不知道如何检查 redis 是否已连接,以便我可以做其他事情跨度>
        • 因为如果 redis 没有连接,我会得到异常并且应用程序停止
        • 无法建立连接,因为目标机器主动拒绝。 [tcp://127.0.0.1:6379] 表示您无法通过任何方式连接那里,
        • 问题是另一个问题。答案是除了说“我知道一些事情”之外没有任何贡献。
        【解决方案5】:

        请尝试catch (\Exception $e) incl。反斜杠

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
        猜你喜欢
        • 2012-10-03
        • 2019-08-02
        • 2015-10-26
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 2014-04-27
        • 2014-11-22
        • 1970-01-01
        相关资源
        最近更新 更多