ビジネスアプリケーションを作成するプログラマーの多くは、実際の開発で Redis を使用する際に Set Value と Get Value の 2 つの操作の使用方法しか知らず、Redis の全体的な理解が不足しています。ここでは、誰もが知らない Redis の問題の概要を示します。 1. Redis を使用する理由 プロジェクトで Redis を使用する場合、パフォーマンスと同時実行性の 2 つの主要な考慮事項があります。分散ロックなどの他の機能だけが必要な場合は、代わりに Zookpeer などのミドルウェアがあり、Redis を使用する必要はありません。
パフォーマンス: 下の図に示すように、実行に特に長い時間がかかり、結果が頻繁に変更されない SQL に遭遇した場合は、実行結果をキャッシュに入れることが特に適しています。このようにして、後続のリクエストはキャッシュから読み取られ、リクエストに迅速に応答できるようになります。 特にフラッシュセールシステムでは、ほぼ全員が同時にクリックして注文をしています。 。 。同じ操作、つまりデータベースからデータを照会する操作が実行されます。 応答時間には固定された標準はなく、相互作用効果によって異なります。理想的には、ページジャンプは瞬時に解決され、ページ内の操作は瞬時に解決される必要があります。 同時: 下の図に示すように、同時実行性が高い場合、すべてのリクエストがデータベースに直接アクセスし、データベースに接続例外が発生します。このとき、リクエストがデータベースに直接アクセスするのではなく、まず Redis にアクセスするように、Redis を使用してバッファリング操作を行う必要があります。 Redisの使用に関する一般的な問題
2. シングルスレッドの Redis が高速なのはなぜですか? この問題は、Redis の内部メカニズムの調査です。 Redis がシングルスレッドの動作モデルであることを知らない人はたくさんいます。 その理由は主に以下の3点です。
I/O 多重化メカニズムについて詳しく説明します。たとえば、Xiaobai は A 市にファーストフード店を開店し、市内でのファーストフードの提供を担当していました。財政的な制約のため、小白さんは配達員のグループを雇った。その後、シャオチュウさんは資金が足りず、急行便を配達するために車しか買えないことに気づいた。建築情報の無料コピーを受け取るには、Junyang: 874811168 を追加してください。 ビジネスモデル1 顧客が注文するたびに、Xiaobai は配達員に注文を監視するよう依頼し、その後誰かを派遣して配達します。徐々に、Xiaoqu はこの動作モードに次のような問題があることを発見しました。
上記の欠点を考慮して、 Xiaobai は失敗から学び、2 番目のビジネス モデルを提案しました。 ビジネスモード2 Xiaobai では配達員を 1 人だけ雇っています。顧客が注文すると、 Xiaobai は配達場所をマークし、それを 1 か所にまとめます。配達員に荷物を一つずつ配達してもらい、配達が終わったら次の荷物を回収しに戻ってもらいます。上記の 2 つの操作方法を比較すると、2 番目の方法の方が効率的であることは明らかです。 上記の例えでは、
したがって、次のような結論に達します。
次の図は、実際の Redis スレッド モデルに類似しています。 Redis クライアントが動作している場合、さまざまなイベント タイプのソケットが生成されます。サーバー側には、それをキューに入れる I/O 多重化プログラムがあります。次に、ファイル イベント ディスパッチャーはキューからファイルを順番に取得し、さまざまなイベント ハンドラーに転送します。 3. Redis のデータ型と使用シナリオ 有能なプログラマーは 5 つのタイプすべてを使用します。 弦 最も一般的な設定/取得操作。値は文字列または数値になります。一般的に、いくつかの複雑なカウント関数をキャッシュします。 ハッシュ ここで、Value は構造化されたオブジェクトを格納し、その中で特定のフィールドを操作する方が便利です。シングル サインオンを実行していたとき、CookieId をキーとして使用し、キャッシュの有効期限を 30 分に設定して、このデータ構造を使用してユーザー情報を保存しました。これにより、セッションのような効果を非常にうまくシミュレートできます。 リスト リスト データ構造を使用すると、単純なメッセージ キュー機能を実行できます。さらに、lrange コマンドを使用して、パフォーマンスとユーザー エクスペリエンスが優れた Redis ベースのページングを実行することもできます。 セット Set は繰り返されない値のコレクションであるためです。したがって、グローバル重複排除機能を実行できます。当社のシステムは通常、クラスターで展開されるため、JVM に付属するセットを使用するのは面倒です。さらに、積、和、差などの演算を使用することで、共通の好み、すべての好み、独自の好み、その他の関数を計算することができます。 ソートセット Sorted Set には追加の重みパラメータ Score があり、セット内の要素はスコアに従ってソートできます。アプリケーションのランキングや TOP N 操作に使用できます。ソート セットは遅延タスクに使用できます。 4. Redisの有効期限戦略とメモリ削除メカニズム ここからRedisが効果的に使われているかどうかが分かります。たとえば、Redis が 5G のデータしか保存できないのに、10G を書き込むと、5G のデータが削除されます。削除するにはどうすればいいですか?この質問について考えたことはありますか? 正解: Redis は定期削除 + 遅延削除の戦略を採用しています。 スケジュールされた削除戦略を使用しないのはなぜですか? スケジュールされた削除: タイマーを使用してキーを監視し、期限が切れると自動的に削除します。メモリは時間内に解放されますが、CPU リソースを大量に消費します。大量の同時リクエストがある場合、CPU はキーを削除するのではなく、リクエストの処理に時間を使う必要があるため、この戦略は採用されません。 定期削除+遅延削除はどのように機能するか 定期的な削除。 Redis はデフォルトで 100 ミリ秒ごとにチェックし、期限切れのキーを削除します。 Redis は 100 ミリ秒ごとにすべてのキーをチェックするのではなく、ランダムに選択してチェックすることに注意してください。定期的な削除戦略のみを採用した場合、多くのキーが時間どおりに削除されません。そこで、遅延削除が役に立ちます。 定期削除+遅延削除を使用すれば他に問題は発生しないでしょうか? いいえ、通常の削除時にキーが削除されない場合は、そうではありません。また、時間内にキーをリクエストしなかったため、遅延削除は有効になりませんでした。このように、Redis のメモリはどんどん高くなっていきます。次に、メモリ削除メカニズムを採用する必要があります。 redis.conf には次の設定行があります:
この構成はメモリ削除戦略用です:
5. Redisとデータベース間の二重書き込みの一貫性の問題 一貫性の問題は、結果的一貫性と強い一貫性に分けることもできます。データベースとキャッシュが二重に書き込まれると、必然的に不整合が生じます。前提として、データに対して強い一貫性の要件がある場合、キャッシュを配置することはできません。私たちにできるのは、最終的な一貫性を確保することだけです。 さらに、私たちが実装したソリューションは、不整合の可能性を根本的に減らすことしかできません。したがって、強い一貫性要件を持つデータはキャッシュに配置することはできません。まず、正しい更新戦略を採用し、最初にデータベースを更新してから、キャッシュを削除します。第二に、キャッシュ削除に失敗する問題が発生する可能性があるため、メッセージキューを使用するなどの補償策を提供することができる。 6. キャッシュ侵入とキャッシュアバランシェの問題に対処する方法 これら 2 つの問題は、中小規模の従来のソフトウェア企業ではほとんど発生しません。数百万のトラフィックを伴う大規模な同時プロジェクトがある場合、これら 2 つの問題を深く考慮する必要があります。キャッシュ侵入とは、ハッカーがキャッシュに存在しないデータを故意に要求し、すべての要求がデータベースに送信され、データベース接続に異常が発生することを意味します。 キャッシュ侵入ソリューション:
キャッシュアバランチソリューション:
7. Redisの同時競合キー問題を解決する方法 基本的に問題は、複数のサブシステムが同時にキーを設定することです。この時、何に注意すべきでしょうか?基本的に誰もが Redis トランザクション メカニズムの使用を推奨します。 しかし、Redis のトランザクション メカニズムの使用はお勧めしません。当社の本番環境は基本的に Redis クラスター環境であるため、データ シャーディング操作が実行されます。トランザクションに複数のキー操作が含まれる場合、これらの複数のキーは必ずしも同じ redis サーバーに保存されるわけではありません。したがって、Redis のトランザクション メカニズムはまったく役に立ちません。 このキーを操作した場合、注文は必要ありません この場合、分散ロックを用意し、全員がそのロックを取得しようとします。ロックを取得したら、set 操作を実行するだけです。比較的簡単です。 このキー操作が必要な場合、注文 key1 があると仮定します。システム A は key1 を valueA に設定する必要があり、システム B は key1 を valueB に設定する必要があり、システム C は key1 を valueC に設定する必要があります。 key1 の値は valueA > valueB > valueC の順に変化することが予想されます。この場合、データベースにデータを書き込むときにタイムスタンプを保存する必要があります。 タイムスタンプが次のとおりであると仮定します。 システムA キー1 {valueA 3:00} システム B キー 1 {valueB 3:05} システム C キー 1 {値 C 3:10} 次に、システム B が最初にロックを取得し、key1 を {valueB 3:05} に設定するとします。次に、システム A はロックを取得し、その valueA のタイムスタンプがキャッシュ内のタイムスタンプよりも早いことを検出し、設定操作を実行しません。キューを使用してセット メソッドをシリアル アクセスに変換するなどの他の方法も可能です。建築情報の無料コピーを受け取るには、Junyang: 586446657 を追加してください。 8. まとめ Redis は、Sina、Alibaba、Tencent、Baidu、Meituan、Xiaomi などの国内大手企業で採用されています。Redis を学ぶ際には、Redis クライアント、高度な Redis 機能、Redis の永続性と開発および運用における一般的な問題に関する議論、Redis レプリケーションの原則と最適化戦略、Redis 分散ソリューションなどが特に重要です。 |
>>: SAP Concur と IDC が共同で、中国ディスクリート製造業向けスマート経費管理業界レポートを発表しました。
国内のインターネットでは、有名な「3Q戦争」、「3B戦争」など、多くの大きな戦争がありましたが、その...
どのような業種の企業であっても、企業ブランドを確立し、製品の販売を促進するために、企業はさまざまなマ...
月々のクラウド コンピューティング費用が予想を超えないようにするには、コンテナー、容量の事前購入、そ...
ランキングのために生まれ、ランキングのために死ぬ。この文章は医療業界における SEO を説明するのに...
ファーウェイは2019年8月23日、深センでAscend 910 AIプロセッサとMindSpore...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス私が最後にSong Ge...
間違いなく、ウェブサイトの内部最適化にとって、スパムコンテンツはSEOに深刻な影響を与える要素です。...
北京時間10月25日早朝、アメリカの消費者レビューサイトAngie's Listが2012年...
ウェブサイトのインクルードは、常にウェブマスターの焦点となっています。多くの SEO 担当者は、ウェ...
最近、浙江省工業ソフトウェア産業技術連盟と浙江省ソフトウェア産業協会の指導の下、NetEase Cl...
2005年にインターネットに触れてから6、7年が経ちました。最初はチャットをしたり、音楽を聴いたり、...
著者: 徐潔成校正:Yun Zhaoアメリカがまた問題を起こしている!ロイター通信によると、事情に詳...
「 IP マーケティング」という場合、多くの場合、協力する人気のある IP を見つけて、共同で製品を...
上海警察は8日、青浦市公安局が綿密な捜査を経て省市をまたぐインターネット詐欺事件を摘発し、機械設備販...
テクノロジーの継続的な発展とビジネスモデルの革新により、効率性の向上とコラボレーションの強化を主な特...