yii2-redis find()返回空结果

时间:2018-06-02 22:50:28

标签: php redis yii2

我有以下简单的模型:

<?php

namespace app\models;

use Yii;
use yii\base\Model;
use \yii\redis\ActiveRecord;
use \yii\db\ActiveQuery;

class StatsModel extends ActiveRecord
{

    public function attributes()
    {
        return ['user'];
    }
    public function rules()
    {
        return [
            ['user' : 'string']
        ];
    }
    public static function getDb()
    {

        return \Yii::$app->db_redis;
    }
}

\Yii::$app->db_redis;是web.php中的配置:

<?php

return [
    'class' => 'yii\redis\Connection',
    'hostname' => 'localhost',
    'port'     => 6379,
    'database' => 0

];

我在redis-cli中做到了:

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> hmset key123 user michael
OK
127.0.0.1:6379>

但是当我在布局视图中执行$test = \app\models\StatsModel::find()->all();时,我在xdebug调试器中看到它返回空集,就像redis中没有记录一样。我无法理解为什么,我只是将一个用户和一个密钥添加到索引为0的数据库。有人能解释一下吗

1 个答案:

答案 0 :(得分:1)

StatsModel::find()->all()用于redis使用专用结构和多个密钥来存储有关模型的数据。不要期望您可以使用随机密钥推送一些数据,它将被解释为活动记录模型。 ActiveRecord不会返回任何内容,因为您尚未创建任何模型 - 您已将某些数据推送到redis,但这不是活动的记录模型。如果要将其用于StatsModel::find()

,则应使用$model = new StatsModel(); $model->id = 1; $model->user = 'rob006'; $model->save(); $result = StatsModel::find()->all(); // finds one model 保存模型
ActiveRecord

或者不要使用$result = Yii::$app->db_redis->hget('key123', 'user'); // "michael" 并直接使用查询:

async havePermission(channelId) {
        if (await this.isPrivateChannel2(channelId) && !(await this.inChannel(channelId))) {
            return false;
        } else {
            return true;
        }
    }

async permission(channelId) {
        console.log(await this.havePermission(channelId));
        return await this.havePermission(channelId);
    }
}