インターネット アプリケーションの継続的な開発に伴い、データの保存と処理に対する需要は増加し続けています。ただし、従来のリレーショナル データベースには、パフォーマンスとスケーラビリティにおいて特定のボトルネックがあります。この問題を解決するために登場したのがNoSQLデータベースです。中でもRedisは高速なNoSQLデータベースとして、キャッシュ、メッセージキュー、キーバリューストレージなどの分野で広く利用されています。この記事では、PHP を使用して Redis に接続し、共有ストレージを実装して読み取りおよび書き込みのパフォーマンスとスケーラビリティを向上させる方法を詳しく紹介します。
1. Redis の基礎知識
Redis は、文字列、ハッシュ テーブル、リストなど、さまざまなデータ構造をサポートしています。 、セット、オーダードセットなど。アプリケーションでは、Redis は通常、よく使用されるデータをキャッシュすることでサーバーの負荷を軽減するキャッシュとして使用されます。
Redis は、RDB と AOF という 2 つの永続化メソッドをサポートしています。 RDB はメモリ内のデータをディスク上のスナップショットに定期的に保存することによって実装されますが、AOF は Redis に書き込まれたすべての操作を記録して、Redis の再起動時に再実行できるようにします。
Redis はマスター スレーブ レプリケーションをサポートしており、読み取りパフォーマンスと可用性を効果的に向上させることができます。マスター/スレーブ レプリケーションにより、マスター サーバーが複数のスレーブ サーバーにデータを同期できるため、マスター サーバーの負荷が軽減され、システムの可用性が向上します。マスターサーバーに障害が発生すると、自動的にスレーブサーバーに切り替わり、システムが迅速に復旧します。
2. PHP は Redis に接続します
PECL 拡張機能または組み込みの Redis 拡張機能を介して Redis に接続できます。次に、両者の使い方を詳しく紹介します。
PECL 拡張機能は、Redis クラスターやセンチネル モードなどのより高度な機能を提供しますが、手動でのコンパイルとインストールが必要です。
1) PECL 拡張機能をインストールします
最初に Redis 拡張機能をダウンロードし、次に拡張機能のディレクトリに入って次のコマンドを実行する必要があります:
phpize ./configure make make install
2) Redis に接続
Connect Redis では、Redis サーバーの IP アドレスとポートを設定する必要があります。接続が確立されると、関連する操作を実行できるようになります。
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->set('name', 'redis'); $name = $redis->get('name'); echo $name;
redis 拡張機能は、PHP 5.5 以降の公式拡張機能です。インストールと使用は非常に簡単で、手動でのコンパイルやインストールは必要ありません。 。
1) Redis 拡張機能をインストールします
yum を通じてインストールできます:
yum install php-redis
インストール パッケージを手動でダウンロードし、解凍してインストールすることもできます:
wget https://github.com/phpredis/phpredis/archive/5.2.3.tar.gz tar -zxvf 5.2.3.tar.gz cd phpredis-5.2.3 phpize ./configure make && make install
2) Redis への接続
Redis への接続には、Redis サーバーの IP アドレスとポートの設定も必要です。接続が確立されると、関連する操作を実行できるようになります。
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->set('name', 'redis'); $name = $redis->get('name'); echo $name;
3. Redis シャードストレージ
Redis データの量が非常に多い場合、単一ノードのパフォーマンスがボトルネックに達する可能性があります。パフォーマンスと可用性を向上させるために、データを複数のノードに分散して共有ストレージを実装できます。
シャードストレージは、データをさまざまな形式でさまざまなノードに割り当て、各ノードがデータの一部を保存します。このようにして、クライアントはキーのハッシュ値を計算することで、各ノード上の対応するデータを見つけることができます。
コンシステント ハッシュ (コンシステント ハッシュ) は、キャッシュやデータベースの分散パフォーマンスのボトルネックを解決するために使用されるアルゴリズムです。キーのハッシュ値をリング上にマッピングすると、リング上で時計回りに最も近いノードがデータ格納ノードとして見つかります。ノードを追加または削除すると、隣接するノードは影響を受けますが、他のノードは影響を受けません。
Redis のシャード ストレージは、一貫したハッシュ アルゴリズムを通じて実装できます。具体的な手順は次のとおりです。
1) キーのハッシュ値を計算し、対応するノードを見つけます。
$server = $nodes[crc32($key) % count($nodes)];
2) 対応するノードに接続し、関連する操作を実行します。
$redis = new Redis(); $redis->connect($server['host'], $server['port']); $redis->set($key, $value);
3) ノードが追加または削除されると、マッピング キーのハッシュ値がコンシステント ハッシュ アルゴリズムを通じて再計算され、データが新しいノードに均等に分散され、元のノード データが削除されます。
4. 実装プロセス
以下では、PHP を使用して Redis に接続し、シャード ストレージを実装する方法を詳しく紹介します。
wget https://github.com/phpredis/phpredis/archive/5.2.3.tar.gz tar -zxvf 5.2.3.tar.gz cd phpredis-5.2.3 phpize ./configure make && make install
<?php // Redis节点列表 $nodes = array( array('host' => '127.0.0.1', 'port' => 6379), array('host' => '127.0.0.1', 'port' => 6380), ); // 计算键的散列值,并找到对应的节点 function getServer($key, $nodes) { $server = $nodes[crc32($key) % count($nodes)]; return $server; } // 连接对应的节点,进行相关操作 function redis($key, $value, $nodes) { $server = getServer($key, $nodes); $redis = new Redis(); $redis->connect($server['host'], $server['port']); $redis->set($key, $value); return true; } // 测试代码 $key = 'name'; $value = 'redis'; redis($key, $value, $nodes); $name = redis->get($key); echo $name; ?>
以上がRedis を使用して PHP で共有ストレージを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。