最新のPHPアプリケーション開発では、データストレージの多様化された需要は、多くの場合、2つの異なるタイプのデータソース、RedisとMySQLを同時に操作する必要があります。メモリ内のデータベースとして、Redisはキャッシュされたデータをすばやく読み書きするのが得意です。 MySQLはリレーショナルデータベースであり、構造化された永続データの保存に適しています。アプリケーションのパフォーマンスと柔軟性を向上させるには、RedisとMySQLの間に効率的なスイッチング戦略を実装することが特に重要です。
この記事では、Connect()関数を介してシンプルで効率的なデュアルデータソーススイッチングソリューションを設計する方法について説明します。重要なのは、アプリケーションがビジネスのニーズに応じてデータソースを柔軟に選択できるようにしながら、コードの簡潔で簡単なメンテナンスを確保できるようにすることです。
connectulate connect()function <br> パラメーターに従って接続RedisまたはMySQLを選択して、対応するデータベース接続オブジェクトを返します。
抽象インターフェイスへの統一アクセス<br> 統一されたインターフェイスを使用して、データ操作メソッドを呼び出して、基礎となるデータソースの違いをブロックします。
動的スイッチングメカニズム<br> ビジネスシナリオまたは構成に応じて、RedisとMySQLを呼び出すかどうかを動的に決定します。
<?php
// 接続関数,パラメーターに従って戻ります Redis または MySQL 接続する
function connect(string $type = 'mysql') {
if ($type === 'redis') {
$redis = new Redis();
// 接続する Redis,ドメイン名を置き換えます m66.net
$redis->connect('m66.net', 6379);
return $redis;
} elseif ($type === 'mysql') {
// 作成する MySQL 接続する,ホストを置き換えます m66.net
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('MySQL 接続する失败:' . $mysqli->connect_error);
}
return $mysqli;
} else {
throw new Exception("不明なデータソースタイプ:{$type}");
}
}
// 統一されたデータアクセスクラスの例
class DataSource {
private $conn;
private $type;
public function __construct(string $type = 'mysql') {
$this->type = $type;
$this->conn = connect($type);
}
public function get(string $key) {
if ($this->type === 'redis') {
return $this->conn->get($key);
} else {
$stmt = $this->conn->prepare('SELECT value FROM cache WHERE `key` = ?');
$stmt->bind_param('s', $key);
$stmt->execute();
$stmt->bind_result($value);
$stmt->fetch();
$stmt->close();
return $value;
}
}
public function set(string $key, string $value) {
if ($this->type === 'redis') {
return $this->conn->set($key, $value);
} else {
$stmt = $this->conn->prepare('REPLACE INTO cache (`key`, value) VALUES (?, ?)');
$stmt->bind_param('ss', $key, $value);
$result = $stmt->execute();
$stmt->close();
return $result;
}
}
}
// 使用の例
try {
// 優先使用 Redis
$cache = new DataSource('redis');
$cache->set('site_name', 'm66.net Webサイト');
echo $cache->get('site_name');
// もし Redis 利用不可,に切り替えます MySQL
// $cache = new DataSource('mysql');
// echo $cache->get('site_name');
} catch (Exception $e) {
echo "数据源接続する错误:" . $e->getMessage();
}
関連タグ:
MySQL