ビジネスアプリケーションを作成するプログラマーの多くは、実際の開発で 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 多重化メカニズムについて詳しく説明します。たとえば、Xiaoming は A 市にファーストフード レストランをオープンし、市内のファーストフード サービスを担当しています。財政的な制約のため、シャオミンは配達員のグループを雇いました。その後、シャオ・クゥさんは資金が足りず、急行便を配達するために車しか買えないことに気づいた。建築情報の無料コピーを受け取るには、Junyang: 874811168 を追加してください。 ビジネスモデル1 顧客が注文するたびに、シャオミンは配達員に注文を監視するよう依頼し、誰かを派遣して配達してもらいます。徐々に、Xiaoqu はこの動作モードに次のような問題があることを発見しました。
上記の欠点を考慮して、シャオミンは自分の失敗から学び、2番目のビジネスモデルを提案しました。 ビジネスモード2 シャオミンは配達員を1人だけ雇っています。顧客が注文すると、シャオミンは配達場所をマークし、それらを 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: 874811168 を追加してください。 8. まとめ Redis は、Sina、Alibaba、Tencent、Baidu、Meituan、Xiaomi などの国内大手企業で採用されています。Redis を学ぶ際には、Redis クライアント、高度な Redis 機能、Redis の永続性と開発および運用における一般的な問題に関する議論、Redis レプリケーションの原則と最適化戦略、Redis 分散ソリューションなどが特に重要です。 出典: http://www.cnblogs.com/yaodengyan/p/9717080.html |
<<: 企業はクラウドサーバーレスプラットフォームに適したワークロードを選択する必要がある
>>: Huawei CloudはSaaSベンダーの強固な基盤となることを目指している
高品質な結果を保証するための計画、コーディング、テスト、コラボレーションの重要な側面を含む、クラス最...
3月16日頃、Googleが自社のRSSリーダークライアントを廃止するというニュースが業界内で流れ、...
HostCat は Hostgator から 25% 割引のプロモーション情報を受け取りました。もち...
より多くの女性をコンピューター業界に参入させようという動きは、すでに数十年にわたって続いています。コ...
SEO に情熱を傾ける初心者の方は、この記事を必ずお読みください。この記事は、SEO Qibing ...
2011年、seoyhwのランキングの浮き沈み、Wolf Language SEOの短命な成功、Li...
A5 Webmaster Network(www.admin5.com)は4月17日、モバイル分野の...
ウェブサイトの診断については、長い間議論されてきたトピックです。しかし、一部のウェブマスターは、ウェ...
アリババグループの会長、ジャック・マー氏はこう語った。「起業で最も恐ろしいのは、見ることができず、見...
今夜、偶然Pizhouフォーラムの投稿を見ました。求人の名称は「Meituan.com 邳州駅 月給...
ウェブサイトの外部最適化を構築できるチャネルについて簡単に説明します。 1. 自分のウェブサイトのプ...
キャンパス内を歩いていると、チラシを配ったり、果物、中古品の取引、宣伝、衣類などを売ったりしている人...
過去1年間、中国のインターネット市場は大きな変化を遂げ、To Bが新たなトレンドとなりました。産業用...
nanovz.com と megavz.com はどちらも inceptionhosting.com...
WeChat公式アカウントのユーザー粘着度とは、ユーザーのアカウントに対する認知度と依存度を指し、P...