phpredisを用いたRedis分散構成の実装ガイド

Redisの分散構成(シャーディング)を実現するphpredisの機能は、一貫ハッシュアルゴリズムを用いて関連するキーを同一ノードに配置し、データの効率的な分散を実現します。この機能はA + E Networksの支援によって開発されました。 分散環境の構成要素は以下の通りです: - Redisノードのリスト - キーの一部を抽出する関数(オプション):一貫ハッシュ処理に使用 - 旧ノードリスト(「previous」オプション):ノード追加・削除時のバックアップ環 - インデックス設定(オプション):キー移行時の参照用 - 自動再散列機能(「autorehash」オプション)

分散配置の作成方法

RedisArrayクラスを使用して分散環境を構築できます。以下に例を示します。

// ノードリストを指定して初期化
$shard = new RedisArray(['primary-server', 'replica-server:6380', 'backup-server:6381']);
// キー抽出関数を指定
function extractShardKey($key) {
    return substr($key, 0, 5); // 最初の5文字をハッシュ対象
}
$shard = new RedisArray(['node1', 'node2'], ['function' => 'extractShardKey']);
// ノード追加時のバックアップ設定
$shard = new RedisArray(
    ['new-node-1', 'new-node-2', 'new-node-3'],
    ['previous' => ['old-node-1', 'old-node-2']]
);

接続設定オプション

接続関連のパラメータを指定できます。

// 再接続待ち時間(ミリ秒)
$shard = new RedisArray(['host1'], ['retry_timeout' => 200]);
// 遅延接続モード
$shard = new RedisArray(['host1', 'host2'], ['lazy_connect' => true]);
// 接続タイムアウト設定
$shard = new RedisArray(['host1'], ['connect_timeout' => 0.3]);

キー移行と自動再散列

ノード構成の変更時、キーの移行を自動化できます。

// 自動再散列を有効化
$shard = new RedisArray(['node1', 'node2'], ['autorehash' => true]);
// 手動で再散列を実行
$shard->_rehash(function($host, $count) {
    // 移行状況の進捗を記録
});

Multi/execの利用

トランザクション処理は単一ノード上で実行する必要があります。

$target = $shard->_target('user:123:name');
$shard->multi($target)
    ->del('user:123:name')
    ->srem('user:index', '123')
    ->exec();

クラスタ情報の取得

分散環境の状態を確認するメソッドを提供しています。

  • $shard->_hosts():ノード一覧を取得
  • $shard->_function():ハッシュ関数名を取得
  • $shard->_target('key'):対象ノードを特定
  • $shard->_instance('host'):特定ノードへの接続インスタンスを取得

テスト実行

テストを実行するには、以下のようにします。

cd tests
./mkring.sh start
php array-tests.php

タグ: phpredis redis シャーディング 一貫ハッシュ PHP

6月25日 00:09 投稿