我正在构建一个 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 数据库。我可以使用具有多个键值的 redis,但是由于当达到最大内存时 redis 正在删除键,所有注册用户和他们的配置文件都将消失,所以我认为我应该将 mysql 用于这个基本的东西(具有角色的数据库,身份验证, 配置文件)
最佳答案
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;
}
关于php - 在 yii2 应用程序中同时使用 mysql 和 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660429/