OCIのRedisクラスタにPredisで接続する際に割とハマったので共有します。
結論としては、下記のようにやるとうまくいきました。
test.php
<?php require_once "./predis/predis/autoload.php"; // プライマリエンドポイント $cluster = ['tls://a***-p.redis.ap-tokyo-1.oci.oraclecloud.com:6379']; // クラスター構成時の必須オプション $option = ['cluster' => 'redis']; // インスタンス化 $redis = new \Predis\Client($cluster, $option); // set, get $redis->set('foo', 'bar'); $value = $redis->get('foo'); echo $value;
実行と結果
# 実行 $ php test.php # 結果 foo
ポイントは
- プライマリエンドポイントに’tls://’と’:6379’をそれぞれつける。
- オプションで ‘schema’ = ‘tls’ といった指定は不要。
- AWSのElastiCacheとも若干書き方が異なる。
というあたりです。
おわりに
これでオートスケーリングでサーバーが複数になった場合でも、OCI Redisにアクセスし、セッションを維持するといったことが可能になります。なお、Predisと並んでよく使われるクライントであるPhpRedisでも同じようにできるはずです。