gpt4 book ai didi

php - 如何使用类函数和初始化文件获取redis键值

转载 作者:可可西里 更新时间:2023-11-01 11:24:33 27 4
gpt4 key购买 nike

在我的项目中,我使用redis。

我有一个初始化文件,包括ip端口和端口,所以类Datasource用于分析初始化文件和连接redis。

这是其中包含函数 getRedis() 的类 Datasource.php 代码:

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' => '',
)
);

现在我想获取redis中的xie值,这是我的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。正确的结果是一行:“get key xie is:zuo”

但是没有显示,谁能帮帮我?

最佳答案

您在静态方法中使用了$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;
}

关于php - 如何使用类函数和初始化文件获取redis键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50794609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com