推奨 (無料): redis チュートリアル
記事ディレクトリ
#1. Redis パブリッシュとサブスクライブの概要
#Redis パブリッシュとサブスクライブ (pub/sub) は、メッセージ通信モード: 送信者 (pub)メッセージを送信すると、サブスクライバ (サブスクライバ) がメッセージを受信します。 Redis クライアントは任意の数のチャネルをサブスクライブできます。
アプリケーション シナリオ:
リアルタイム メッセージング システム
を構築します。通常のインスタントチャット、グループチャット、その他の機能。 メッセージをプッシュすることができます。
。
2. Redis パブリッシュおよびサブスクライブのデモ
パブリッシュおよびサブスクライブ構文 サブスクリプション チャネル:
subscribe channel1 [channel2 ...] 1 つ以上の指定されたチャンネルの情報を購読します
psubscribe pattern1 [pattern2 .. .] 指定されたパターンに一致する 1 つ以上のチャネルを購読します。
チャネルの発行:
チャネル メッセージの発行 指定したチャネルにメッセージを送信します。
チャンネル登録解除:
unsubscribe channel1 [channel2 ...] 指定されたチャンネルの登録解除を参照します。
punsubscribe pattern1 [pattern2 ...] 指定されたパターンのすべてのチャネルから購読を解除します。
3. Redis のトランザクション
Redis トランザクションは、一度に複数のコマンドを実行できます (連続した文字列の Lineized 実行)。 、実行中に他のコマンドは挿入されず、ブロックも許可されません)トランザクション アプリケーション シナリオ:
2 つの機能:
トランザクションを開始し、キューにコマンドを送り、トランザクションを実行します。
トランザクション関連コマンド:
multi トランザクション ブロックの開始をマークします。
exec トランザクション ブロック内のすべてのコマンドを実行します。
discard トランザクションをキャンセルし、トランザクション ブロック内のすべてのコマンドの実行を放棄します。
watch key 1 つ (または複数) のキーを監視します。トランザクションが実行される前に、この (またはこれらの) キーが他のコマンドによって変更された場合、トランザクションは中断されます。
unwatch watchコマンドで全キーの監視を解除します。
4. 送金関数 - Redis トランザクションのデモ
要件: 送金関数、A がアカウント B に 50 元を送金します。この例では、移転前、A は 80 元、B は 10 元を持っていました。
- 譲渡後、Aは30元、Bは60元になります。
multi でトランザクションを開始し、次に複数のコマンドをトランザクションのキューに入れ、最後に
exec コマンドでトランザクションをトリガーします。
コマンドを使用してキュー操作を放棄できます。 MySQL。
5. transfer function-watch のアップグレード版
要件: アカウントはトランザクション内で動作します。トランザクションを送信する前に、別の A プロセスが実行されます。アカウントで動作します。
上記の転送は安全ではありません。実行中にアカウント a または b で他のコマンドが動作している場合、ファントム読み取りが発生する可能性があります。解決策は、アカウントを監視する watch コマンドを追加することです。アカウントで他のコマンドが動作すると、トランザクション実行中に a または b が発生すると、プログラムは直接エラーを報告し、ロールバックします。
watch コマンド実行後、exec
または discard
コマンドが先に実行されている場合は、実行する必要はありません。 again exec または Discard コマンドによって監視が自動的にキャンセルされるため、unwatch
を使用してキーの監視をキャンセルします。
6. トランザクション エラーの処理
ビジネス ロジック エラー
ビジネス ロジック エラーが発生しました: エラー報告のみコマンドは実行されませんが、他のコマンドは実行され、ロールバックされません。
#構文エラー
構文エラーが発生しました。実行中にすべてのキューがキャンセルされます。
7. Redis の永続性
データはメモリに保存されます: 効率的ですが、電源を切るとメモリ データは失われます。 データはハードディスクに保存されます。読み書き速度はメモリに比べて遅いですが、電源を切ってもデータは失われません。
RDB 永続性
RDB は、redis のデフォルトの永続化メカニズムです。 RDBはデータの状態を保存するスナップショットの取得に相当します。 (数十 GB のデータを数 KB のスナップショットとして保存できます)スナップショットはデフォルトの永続化方法です。この方法は、メモリ上のデータをスナップショットの形式でバイナリ ファイルに書き込む方法であり、デフォルトのファイル名はdump.rdb (redis.conf ファイル内に存在します) です。
AOF 永続性
スナップショット方式は一定間隔で一度実行されるため、Redis が予期せずダウンした場合、最後のスナップショットが失われます。 。アプリケーションが変更を失わないようにする必要がある場合は、AOF (Append-Only File) 永続化メソッドを使用できます。appendonly yes コマンドで AOF 永続性を有効にできます。
書き込みコマンドを受け取ったらすぐにディスクに書き込み、これは最も遅いですが、完全な永続性を保証します
1 秒に 1 回ディスクに書き込み、パフォーマンスと永続性の間で適切な妥協を行います
Dedleg in , but thepersistence is not generated
Advantages: AOF has betterpersistence than the snapshot method. なぜなら、AOF 永続モードを使用する場合は次のとおりです。 ##redis は、受信したすべての書き込みコマンドを書き込み関数を通じてファイルに追加します (デフォルトは appendonly.aof)。 Redis が再起動すると、ファイルに保存された書き込みコマンドを再実行することにより、データベース全体の内容がメモリ内に再構築されます。
AOF 手法には別の問題も伴います。永続ファイルはますます大きくなり、
ハード ディスクを占有します。たとえば、incr test コマンドを 100 回呼び出した場合、100 個のコマンドすべてをファイルに保存する必要がありますが、実際には、そのうち 99 個が冗長です。
以上がRedis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。