【问题标题】:Using both mysql and redis in yii2 application在 yii2 应用程序中同时使用 mysql 和 redis
【发布时间】:2018-11-12 14:23:16
【问题描述】:

我正在构建一个 CRM 系统,它应该允许不同用户进行不同的访问,因此我需要在面板中进行复杂的身份验证和通知。但是主系统应该使用REDIS。我已经安装了 yii2 redis 插件并在 db.php (mysql config) 中有这样的配置:

<?php
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
    // Schema cache options (for production environment)
    //'enableSchemaCache' => true,
    //'schemaCacheDuration' => 60,
    //'schemaCache' => 'cache',
];

在 web.php 中:

$db = require __DIR__ . '/db.php';
$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'aliases' => [
        '@bower' => '@vendor/bower-asset',
        '@npm'   => '@vendor/npm-asset',
    ],

'components' => [
        'redis'         => [

            'class'    => 'yii\redis\Connection',

            'hostname' => 'localhost',

            'port'     => 6379,

            'database' => 0,

        ],
     ],
     'db' => $db,

如何区分我的模型,使用 mysql 或 redis?我假设如果我在组件部分指定 redis,整个应用程序都使用 redis db。我可以使用具有多个键值的redis,但是由于redis在达到最大内存时会删除键,所以所有注册用户及其配置文件都会教区,所以我认为我应该将mysql用于这个basci的东西(具有角色的数据库,身份验证,个人资料)

【问题讨论】:

    标签: php mysql redis yii2


    【解决方案1】:
    return [
       'components' => [
          'db1' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,...
            'username' => 'db1username',
            'password' => 'db1password',
        ],
        'db2' => [
            'class' => 'yii\redis\Connection',
            'dsn' => 'YOURCONFIG', 
            'port' => '6379',
            'password' => 'db2password',
            'username' => 'db2username',
        ],
      ],
    ];
    

    那就试试用

    // To get from db1
    Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()
    
    // To get from db2
    Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll();
    

    在你的模型中写入活动记录

    // db1
    public function getDb() {
        return Yii::$app->db1;
    }
    
    //Or db2
    public function getDb() {
        return Yii::$app->db2;
    }
    

    【讨论】:

    • 嗨,如果这对您有帮助,您可以投票给答案,这将帮助我改善我的帐户
    猜你喜欢
    • 2012-04-12
    • 2011-04-27
    • 2010-12-10
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多