<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 使用主從數據庫 >[success] Redis 也是同樣的配置方法,只是 ::class 不同 框架中獲取連接的主力方式是通過連接池,而 mix 的連接池是通過撥號器的方式由用戶在撥號器自主創建連接,得益于這種靈活的設計,我們可以通過:新增一個從庫單例 ConnectionPool::class 通過控制撥號器實例化不配置的連接而實現用戶獲取連接時獲取到不同的數據庫從庫,從而達到主從的目的。 ## 開始 >[danger] 使用該功能需先閱讀 "核心功能 > 依賴注入" 章節 首先在 .env 增加從庫使用的連接信息: ~~~ DATABASE_DSN_SLAVE1='mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=test' DATABASE_USERNAME_SLAVE1=root DATABASE_PASSWORD_SLAVE1= DATABASE_DSN_SLAVE2='mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=test' DATABASE_USERNAME_SLAVE2=root DATABASE_PASSWORD_SLAVE2= ~~~ 然后在 manifest.php 為每個從庫配置一個 Connection::class 的依賴配置: - 配置中使用了上面配置的新環境變量 ~~~ // Database Slave1 [ // 名稱 'name' => 'dbSlave1', // 類路徑 'class' => \Mix\Database\Connection::class, // 初始化方法 'initMethod' => 'connect', // 屬性注入 'properties' => [ // 數據源格式 'dsn' => getenv('DATABASE_DSN_SLAVE1'), // 數據庫用戶名 'username' => getenv('DATABASE_USERNAME_SLAVE1'), // 數據庫密碼 'password' => getenv('DATABASE_PASSWORD_SLAVE1'), // 驅動連接選項: http://php.net/manual/zh/pdo.setattribute.php 'attributes' => [ // 設置默認的提取模式: \PDO::FETCH_OBJ | \PDO::FETCH_ASSOC \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, // 超時 \PDO::ATTR_TIMEOUT => 5, ], // 事件調度器 'eventDispatcher' => ['ref' => \Mix\Event\EventDispatcher::class], ], ], // Database Slave2 [ // 名稱 'name' => 'dbSlave2', // 類路徑 'class' => \Mix\Database\Connection::class, // 初始化方法 'initMethod' => 'connect', // 屬性注入 'properties' => [ // 數據源格式 'dsn' => getenv('DATABASE_DSN_SLAVE2'), // 數據庫用戶名 'username' => getenv('DATABASE_USERNAME_SLAVE2'), // 數據庫密碼 'password' => getenv('DATABASE_PASSWORD_SLAVE2'), // 驅動連接選項: http://php.net/manual/zh/pdo.setattribute.php 'attributes' => [ // 設置默認的提取模式: \PDO::FETCH_OBJ | \PDO::FETCH_ASSOC \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, // 超時 \PDO::ATTR_TIMEOUT => 5, ], // 事件調度器 'eventDispatcher' => ['ref' => \Mix\Event\EventDispatcher::class], ], ], ~~~ 新增一個撥號器 DatabaseSlaveDialer::class: - 通過多個依賴名稱輪轉實例化數據庫連接對象,實現創建不同從庫的連接 ~~~ <?php namespace App\Common\Dialers; use Mix\Database\Connection; use Mix\Pool\DialerInterface; /** * Class DatabaseSlaveDialer * @package App\Common\Dialers * @author liu,jian <coder.keda@gmail.com> */ class DatabaseSlaveDialer implements DialerInterface { /** * @var array */ protected $slaveBeanNames = ['dbSlave1', 'dbSlave2']; /** * 撥號 * @return Connection */ public function dial() { // 輪轉 $beanName = array_pop($this->slaveBeanNames); array_unshift($this->slaveBeanNames, $beanName); // 創建一個連接并返回 return context()->get($beanName); } } ~~~ 在 manifest.php 增加名稱為 `dbPoolSlave` 的 ConnectionPool::class 依賴配置: - 配置中 dialer 屬性引用了 DatabaseSlaveDialer::class 完成撥號 ~~~ // Database Slave 連接池 [ // 名稱 'name' => 'dbPoolSlave', // 作用域 'scope' => \Mix\Bean\BeanDefinition::SINGLETON, // 類路徑 'class' => \Mix\Database\Pool\ConnectionPool::class, // 屬性注入 'properties' => [ // 最多可空閑連接數 'maxIdle' => 5, // 最大連接數 'maxActive' => 50, // 撥號器 'dialer' => ['ref' => \App\Common\Dialers\DatabaseSlaveDialer::class], ], ], // Database連接池撥號 [ // 類路徑 'class' => \App\Common\Dialers\DatabaseSlaveDialer::class, ], ~~~ 業務代碼中調用: >[danger] 與傳統框架自動通過 SQL 切換主從的方式不同,mix 的這種主從實現其實只是擴展了多個從庫調用的方式,因此需要用戶自己在代碼中選擇使用主庫還是從庫。 - 當使用主庫時,使用默認配置的 `dbPool` 依賴名稱獲取池實例 ``` /** @var \Mix\Database\Pool\ConnectionPool $dbPool */ $dbPool = context()->get('dbPool'); $db = $dbPool->getConnection(); // ... $db->release(); // 不手動釋放的連接不會歸還連接池,會在析構時丟棄 ``` - 當使用從庫時,使用剛剛上面配置的 `dbPoolSlave` 依賴名稱獲取池實例 ~~~ /** @var \Mix\Database\Pool\ConnectionPool $dbPool */ $dbPool = context()->get('dbPoolSlave'); $db = $dbPool->getConnection(); //... $db->release(); // 不手動釋放的連接不會歸還連接池,會在析構時丟棄 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看