Как получить значение ключа redis с помощью функции класса и файла инициализации - PullRequest
0 голосов
/ 11 июня 2018

В моем проекте я использую redis.

И у меня есть файл инициализации, включая ip-порт и порт, поэтому класс Datasource используется для анализа файла инициализации и подключения redis.

ВотКод класса Datasource.php с функцией getRedis () в нем:

namespace common;

class Datasource {

public function __construct() {}

public static function getRedis($config_name = NULL, $server_region = 'default') {

    global $config;
    $redis_config = $config['redis'][$config_name];

    if ($config_name && $redis_config && $server_region) {
        $this->_config_name = $config_name;
        $this->_redis_config = $redis_config;
        $this->_server_region = $server_region;

        try {
            $this->_redis = new \Redis();
            $this->_redis->connect($this->_redis_config[$server_region]['host'], $this->_redis_config[$server_region]['port']);
            if($this->_redis_config[$server_region]['password'] && !$this->_redis->auth($this->_redis_config[$server_region]['password'])) {
                $this->_redis = null;
            }
        } catch (Exception $e) {
            $this->_redis = null;
        }
    } else {
        $this->_redis = null;
    }

    return self::$this->_redis;
   }
 }// end of class Datasource

Вот код инициализации файла redis.ini.php

<?php
 $config['redis']['instance1'] = array(
'default' => array(
    'host' => '127.0.0.1',
    'port' => '6379',
    'timeout' => 5,
    'pconnect' => 1,
    'password' => '',
  )
);
 $config['redis']['instance2'] = array(
'default' => array(
    'host' => '127.0.0.1',
    'port' => '6379',
    'timeout' => 5,
    'pconnect' => 1,
    'password' => '',
    )
  );

Теперь я хочу получить значение xie, котороенаходится в Redis, вот мой HTML-код:

<body style="height:100%" >
<?php 
include "o1ws1v/class/common/Datasource.php";
include 'o1ws1v/conf/redis.ini.php';
$redis_obj = common\Datasource::getRedis('instance1');

$value = $redis_obj->get("xie");
echo "get key xie is:".$value."\n";

?>
</body>

На самом деле, ключ xie должен быть ZUO.Следующим результатом является строка: «получить ключ xie is: zuo»

Но это ничего не показало, Кто мне может помочь?

1 Ответ

0 голосов
/ 11 июня 2018

Вы используете $this в статическом методе, и вы не можете.Кроме того, вы перехватываете все исключения при подключении к Redis, поэтому вы не можете знать, почему это не было неудачно.Вам нужно сделать две вещи:

  1. Включение ошибок PHP (конечно, только для разработки)
  2. Не перехватывать исключения при подключении, и если вы это сделаете, - войдите в систему /сохраните сообщение об исключении.

Попробуйте что-то вроде этого:

<?php

namespace common;

class Datasource
{
    private static $_redis, $_config_name, $_redis_config, $_server_region;

    public static function getRedis($config_name = NULL, $server_region = 'default')
    {
        error_reporting(E_ALL);
        ini_set("display_errors", true);

        global $config;

        $redis_config = $config['redis'][$config_name];

        if (!$config_name || !$redis_config || !$server_region) {
            throw new \Exception('$config_name or $redis_config or $server_region is not set');
        }

        if (!$redis_config[$server_region]['password']) {
            throw new \Exception('Redis password is not set');
        }

        self::$_config_name = $config_name;
        self::$_redis_config = $redis_config;
        self::$_server_region = $server_region;

        self::$_redis = new \Redis();

        self::$_redis->connect(self::$_redis_config[$server_region]['host'], self::$_redis_config[$server_region]['port']);

        if (!self::$_redis->auth(self::$_redis_config[$server_region]['password'])) {
            throw new \Exception("Can't login to Redis. Check password");
        }

        return self::$_redis;
    }
}

И код, отображающий ошибки, явно не относится к этому, это просто для вас, чтобы увидеть, есть ли ошибкивременно.

Кроме того, я бы добавил условие, чтобы увидеть, установлен ли Redis, а затем вернул соединение.В противном случае вы будете устанавливать другое соединение каждый раз, когда вызываете метод getRedis.Примерно так:

public static function getRedis(...)
{
    if (!self::$_redis) {
        ...
    }

    return self::$_redis;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...