問題タブ [predis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Predis subscribe 関数内から Laravel イベントを発生させる
Laravel php アプリと NodeJS クライアントがあります。クライアントで何かが発生し、php バックエンドを更新したいので、Redis チャネルにメッセージを発行します。Laravel アプリでは、そのチャネルでメッセージをリッスンする Redis サブスクライバーを持っています。
理想的には、メッセージを受信したときにイベントを発生させたいのですが、このエラーが発生します
[Predis\Response\ServerException] このコンテキストでは ERR のみ (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT が許可されています
リポジトリの更新など、サブスクライバー内から必要なことを実行できますが、Laravel イベントを発生させることができません。
redis - Sentinel 経由で Redis クラスターに接続する
3 つのマスター ノードと 3 つのスレーブの redis クラスターがあります。また、Redis クラスターを監視する 3 つの Sentinel サーバー (それぞれが別のマシン上) もあります。Predis を使用して、単一のマスター ノードの IP/ポートを介してクラスターに接続できます。しかし、実際に Predis を Sentinel IP/ポート経由でクラスターに接続できるかどうか知りたいですか?
php - Predis + Elasticache 自動フェイルオーバー構成
書き込みマスターと 2 つの読み取りレプリカを持つ AWS 上の Elasticache クラスターに対して Predis を実行しています。Predis は、大まかに次のようにマスター/スレーブ レプリケーション用に構成されます。
現在、自動フェールオーバー リカバリを構成中です。Elasticache は、読み取りスレーブを昇格させ、マスター ノードのホスト名の dns レコードを更新することにより、マスター ノードの障害回復をサポートします。障害が発生した場合、マスターのホスト名は変更されないため、Predis は上記の構成で賢明ではないはずです。
ただし、上記の構成では、問題が発生します。人間が介入するまで (または何らかの英雄的なコードが作成されるまで)、3 ノード クラスターから 2 ノード クラスターに効果的に移行します。
私の主張を明確にするために..失敗する前に..
失敗後... (node1 が失敗し、node2 が昇格します)
これは限られた時間であれば問題ありませんが、理想的にはこれを解決したいと考えています。
復元が完了すると、elasticache は node1 を読み取りレプリカとして復元します。利用可能になり次第、リードレプリカとして機能を開始したいと考えています。
Predisを次のように構成することで、これを回避できると考えていました..
...ここで、REDIS_SLAVE03 は REDIS_MASTER と同じ基礎となるインスタンスを指しますが、障害イベントで変更されないホスト名によって指します。事実上、すべてのノードは常に読み取りスレーブとして動作し、書き込みのマスターへの「ポインター」は Predis の知らないうちにシフトされます。
そこでいくつか質問...
1) スレーブが応答しなくなったときの Predis の動作は? その構成を無視し、読み取りを他の応答性の高いスレーブにルーティングしますか?
2) マスター redis インスタンスは読み取り操作の 2 倍になりますか? (おそらく答えはイエスです)
3) このアプローチには、私が見逃している欠陥がありますか?
4) より良いアイデアはありますか?
あらゆるアドバイスをいただければ幸いです。
redis - マスター redis インスタンスでロング トランザクションまたは Lua スクリプトを実行すると、読み取り専用スレーブでブロックされますか?
マスター Redis サーバー キーの最新のコピーにアクセスできるようにしたいと考えています。読み取り専用コピーをポーリングするため、完全に最新である必要はありませんが、マスター インスタンスで実行するトランザクションと Lua スクリプトが、キーをスキャンするときに読み取り専用インスタンスでブロックされることは望ましくありません。私の読み取り専用インスタンスで。
誰でもこの動作を確認/拒否できますか?
redis - redis-cluster でパイプラインを使用する場合の Predis エラー
redis-cluster にキーと値のペアを追加し、1 つのパイプラインで新しいキーの有効期限を設定しようとしています。キーが移動されたというエラーが発生するたびに、Predis はパイプライン処理なしのように MOVED ステートメントに従う必要があると思います。
パイプで失効呼び出しを行うことはできませんか? redis_version: 3.0.2 で Predis 1.0.2-dev を使用しています
これは機能します:
これは動作しません:
次のエラーが表示されます。
編集: redis-cluster ではパイプラインが機能しないようです。期限切れ呼び出しを削除し、パイプに set 呼び出しのみがあると、同じエラーが発生します。
php - Redis スキャン スキップ キー
Redisと連携するために、predis(違いがある場合はlaravelを使用)phpクライアントを使用しています。
特定のプレフィックスに一致するすべてのキーを Redis から取得する必要があり、次のようにします。
これらのキーでの作業が完了したら、操作が繰り返されます。ループ内で再びそれらのキーを取得しています。数回繰り返した後、一部のキーが $keys 配列に含まれていないことに気付きました。
最も奇妙なことは、消えたキーが次の反復で表示されないことです。php プロセス (デーモン) を再起動すると、問題が解決します。
Predis 1.0 および PHP 5.4 で Redis 3.0.2 を使用しています
PSキーのループ内で、それらのいくつかの値を変更します。ただし、キーは削除しません。