Использование mysql и redis в приложении yii2 - PullRequest
0 голосов
/ 02 июня 2018

Я строю систему 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 для этой вещи баши (база данных с ролями, аутентификация, профили)

1 Ответ

0 голосов
/ 02 июня 2018
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;
}
...