ホームページ  >  記事  >  データベース  >  Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

coldplay.xixi
coldplay.xixi転載
2021-02-23 09:54:222090ブラウズ

Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

推奨 (無料): redis チュートリアル

記事ディレクトリ

  • 1. Redis パブリッシュおよびサブスクライブの概要
  • 2. Redis パブリッシュおよびサブスクライブのデモ
  • 3. Redis でのトランザクション
  • 4. Redis のパブリッシュおよびサブスクライブのデモ
  • #4.転送関数 - Redis トランザクションのデモ
  • 5. 転送関数 - watch のアップグレード版
  • 6. トランザクション エラー処理
    • ビジネス ロジック エラー
    構文エラー
  • 7. Redis の永続性
    • RDB の永続性
    AOF の永続性

#1. Redis パブリッシュとサブスクライブの概要

#Redis パブリッシュとサブスクライブ (pub/sub) は、メッセージ通信モード: 送信者 (pub)メッセージを送信すると、サブスクライバ (サブスクライバ) がメッセージを受信します。 Redis クライアントは任意の数のチャネルをサブスクライブできます。

Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

アプリケーション シナリオ:

  • リアルタイム メッセージング システムを構築します。通常のインスタントチャット、グループチャット、その他の機能。
  • ②ブログ Web サイトには、あなたを購読している n 人のファンがいます。新しい記事を公開するときに、ファンに メッセージをプッシュすることができます。
  • WeChat パブリック アカウント モード

2. Redis パブリッシュおよびサブスクライブのデモ

パブリッシュおよびサブスクライブ構文 サブスクリプション チャネル:

  • subscribe channel1 [channel2 ...] 1 つ以上の指定されたチャンネルの情報を購読します

  • psubscribe pattern1 [pattern2 .. .] 指定されたパターンに一致する 1 つ以上のチャネルを購読します。
    Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する チャネルの発行:

  • チャネル メッセージの発行 指定したチャネルにメッセージを送信します。
    Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する
    Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する チャンネル登録解除:

  • unsubscribe channel1 [channel2 ...] 指定されたチャンネルの登録解除を参照します。

  • punsubscribe pattern1 [pattern2 ...] 指定されたパターンのすべてのチャネルから購読を解除します。
    Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

3. Redis のトランザクション

Redis トランザクションは、一度に複数のコマンドを実行できます (連続した文字列の Lineized 実行)。 、実行中に他のコマンドは挿入されず、ブロックも許可されません)

トランザクション アプリケーション シナリオ:

  • 製品フラッシュ セール
  • 転送

2 つの機能:

    Redis はトランザクション化ですべてのコマンド シーケンスを転送します。を指定し、それらを順番に実行します (コマンドの実行に失敗した場合でも、残りのコマンドは引き続き実行されます)
  • は実行中に他のコマンドによって挿入されず、余分なレースは許可されません。
トランザクションは、開始から実行まで次の 3 つの段階を経ます。

トランザクションを開始し、キューにコマンドを送り、トランザクションを実行します。

トランザクション関連コマンド:
multi トランザクション ブロックの開始をマークします。
exec トランザクション ブロック内のすべてのコマンドを実行します。
discard トランザクションをキャンセルし、トランザクション ブロック内のすべてのコマンドの実行を放棄します。
watch key 1 つ (または複数) のキーを監視します。トランザクションが実行される前に、この (またはこれらの) キーが他のコマンドによって変更された場合、トランザクションは中断されます。
unwatch watchコマンドで全キーの監視を解除します。

4. 送金関数 - Redis トランザクションのデモ

要件: 送金関数、A がアカウント B に 50 元を送金します。

    移転前、A は 80 元、B は 10 元を持っていました。
  • 譲渡後、Aは30元、Bは60元になります。
この例では、

multi でトランザクションを開始し、次に複数のコマンドをトランザクションのキューに入れ、最後に exec コマンドでトランザクションをトリガーします。

    マルチ コマンドを入力して開始します。入力されたコマンドは 1 つずつコマンド キューに入りますが、実行されません。
  • Exec が入力されるまで、Redis は前のコマンド キュー内のコマンドを順番に実行します。

  • Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する exec を実行する前に、追加されたコマンドに問題があることがわかった場合は、
    discard コマンドを使用してキュー操作を放棄できます。 MySQL。

5. transfer function-watch のアップグレード版

要件: アカウントはトランザクション内で動作します。トランザクションを送信する前に、別の A プロセスが実行されます。アカウントで動作します。

上記の転送は安全ではありません。実行中にアカウント a または b で他のコマンドが動作している場合、ファントム読み取りが発生する可能性があります。解決策は、アカウントを監視する watch コマンドを追加することです。アカウントで他のコマンドが動作すると、トランザクション実行中に a または b が発生すると、プログラムは直接エラーを報告し、ロールバックします。

Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

watch コマンド実行後、exec または discard コマンドが先に実行されている場合は、実行する必要はありません。 again exec または Discard コマンドによって監視が自動的にキャンセルされるため、unwatch を使用してキーの監視をキャンセルします。

6. トランザクション エラーの処理

ビジネス ロジック エラー

ビジネス ロジック エラーが発生しました: エラー報告のみコマンドは実行されませんが、他のコマンドは実行され、ロールバックされません。
Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

#構文エラー

構文エラーが発生しました。実行中にすべてのキューがキャンセルされます。
Redis のパブリッシュとサブスクライブのデモ、トランザクションのデモ、永続性について説明する

7. Redis の永続性

データはメモリに保存されます: 効率的ですが、電源を切るとメモリ データは失われます。

データはハードディスクに保存されます。読み書き速度はメモリに比べて遅いですが、電源を切ってもデータは失われません。

RDB 永続性

RDB は、redis のデフォルトの永続化メカニズムです。 RDBはデータの状態を保存するスナップショットの取得に相当します。 (数十 GB のデータを数 KB のスナップショットとして保存できます)

スナップショットはデフォルトの永続化方法です。この方法は、メモリ上のデータをスナップショットの形式でバイナリ ファイルに書き込む方法であり、デフォルトのファイル名は

dump.rdb (redis.conf ファイル内に存在します) です。

利点:

    スナップショットはデータを非常に迅速に保存し、非常に迅速にデータを復元します
  • 災害時バックアップに適しています
欠点:

    メモリの小さいマシンは使用には適していません。RDB メカニズムが要件を満たしている場合、スナップショットを取得してメモリを占有します。

AOF 永続性

スナップショット方式は一定間隔で一度実行されるため、Redis が予期せずダウンした場合、最後のスナップショットが失われます。 。アプリケーションが変更を失わないようにする必要がある場合は、AOF (Append-Only File) 永続化メソッドを使用できます。

appendonly yes コマンドで AOF 永続性を有効にできます。

次の 3 つの方法があります (デフォルトは fsync 1 秒に 1 回)

  • appendfsync always 書き込みコマンドを受け取ったらすぐにディスクに書き込み、これは最も遅いですが、完全な永続性を保証します
  • appendfsync Everysec 1 秒に 1 回ディスクに書き込み、パフォーマンスと永続性の間で適切な妥協を行います
  • appendfsync no 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 サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。