この記事では、面接中によく聞かれる質問の概要を紹介します Redis.面接官が Redis のトピックを段階的に詳しく掘り下げていく様子をシミュレートし、候補者の Redis に対する理解を総合的に調査します。 Redis. 皆さんのお役に立てれば幸いです。
推奨調査: 「2022 最新の Redis 面接の質問と回答 」
Redis 面接でよくある質問 12 のキーポイント
面接ではRedisは避けては通れない敷居が高く、履歴書にRedisを使ったことがあると書く限り絶対に逃げられません。
シャオ・ジャン:
こんにちは、インタビュアー。面接に来ました。
インタビュアー:
こんにちは、シャオ・チャン。私はあなたの履歴書を読み、Redis に精通しているので、Redis 関連の質問をいくつかさせていただきます。まず最初に、私の質問は、Redis はシングルスレッドですか、それともマルチスレッドですか?
Xiao Zhang:
Redis のさまざまなバージョンで使用されるスレッド モデルは異なります。Redis バージョン 4.0 より前では、シングルスレッド モデルが使用され、バージョン 4.0 以降では、マルチスレッドのサポートが強化されました。
4.0 より前は、Redis がシングルスレッドであると述べましたが、それはネットワーク I/O スレッドと Set および Get 操作が 1 つのスレッドで完了することを意味するだけでした。ただし、Redis の永続化とクラスターの同期は、引き続き他のスレッドを使用して完了します。
4.0 以降、マルチスレッドのサポートが追加されました。これは主に、unlink key
、flushdb async
、 などのビッグ データの非同期削除機能に反映されています。 lushall async
お待ちください
インタビュアー:
答えはとても良いです。 では、なぜ Redis は 4.0 より前にシングル スレッドを使用することを選択したのでしょうか?シングルスレッドを使用するとそんなに速いのでしょうか?
Xiao Zhang:
シングルスレッドを選択する主な理由は、使いやすいこと、ロックの競合がないこと、ロックなしですべての操作を完了できること、そしてデッドロックやスレッドが発生しない 切り替えはパフォーマンスと時間のオーバーヘッドをもたらしますが、同時にシングルスレッドではマルチコア CPU のパフォーマンスを十分に発揮できません。
なぜシングルスレッドが速いのかというと、主に以下の理由が考えられます。
Redis のほとんどの操作はメモリ内で完結し、メモリ内での実行効率が低いためです。メモリ自体 高速で、ハッシュ テーブルやスキップ テーブルなどの効率的なデータ構造を使用します。
単一スレッドを使用すると、マルチスレッドの競合が回避され、マルチスレッドの切り替えによって発生する時間とパフォーマンスのオーバーヘッドが節約され、デッドロックが発生しません。
I/O 多重化メカニズムは、ノンブロッキング I/O モデルに基づいており、Redis が効率的に通信できるため、多数のクライアント ソケット リクエストを処理するために使用されます。ネットワーク経由では、I/O 読み取りおよび書き込みプロセスはブロックされなくなりました。
インタビュアー:
はい、Redis はどのようにしてデータ損失をゼロにできるのでしょうか?
Xiao Zhang:
Redis データはメモリに保存されています。Redis データが失われないようにするには、データをメモリからこれが Redis のデータ永続化です。 Redis データを永続化するには 3 つの方法があります。
AOF ログ (追加専用ファイル、ファイル追加モード): すべての操作コマンドを記録し、テキスト形式でファイルに追加します。
RDB スナップショット (Redis データベース): 特定の瞬間のメモリ データをバイナリ形式でディスクに書き込みます。
ハイブリッド永続化メソッド: Redis 4.0 では、RDB と AOF の利点を統合した新しいハイブリッド永続化メソッドが追加されています。
インタビュアー:
それでは、AOF と RDB のそれぞれの実装原則について話してください。
Xiao Zhang:
AOF は書き込み後ログを使用します。Redis はまずコマンドを実行してデータをメモリに書き込み、次にログをファイルに記録します。 AOF ログには実際のデータではなく運用コマンドが記録されるため、障害回復に AOF 方式を使用する場合はログ全体を実行する必要があります。
RDB はメモリ スナップショット方式を採用しており、操作ではなく、ある瞬間のデータを記録します。 RDB ファイルをメモリに直接読み込んで、迅速なリカバリを実現できます。
インタビュアー:
先ほど、AOF では「書き込み後ログ」方式が使用されているとおっしゃいましたが、私たちが通常使用している MySQL では「書き込み前ログ」方式が使用されています。では、 なぜですか? Redis は最初にコマンドを実行してからデータをログに書き込む必要がありますか?
シャオ・チャン: 額に汗が出てきました。質問は何ですか? 。 。
これは主に、Redis がコマンドをログに書き込む前にコマンドの構文をチェックしないため、間違ったコマンドの記録を避けるために正常に実行されたコマンドのみを記録し、書き込むことができないためです。コマンドの実行後にログが記録され、現在の書き込み操作がブロックされます。
インタビュアー:
の後に日記を書くリスクは何ですか?
シャオ・チャン:
私...どうすればいいのか分かりません。
インタビュアー:
そうですね、ログを書き込むときに発生する可能性のある主なリスクが 2 つあります:
データが失われる可能性があります: Redis の実行直後の場合コマンドに障害が発生すると、コマンドが失われる可能性があります。
他の操作をブロックする可能性があります: AOF ログは実際にはメインスレッドで実行されるため、Redis がログ ファイルをディスクに書き込むとき、後続の操作は引き続きブロックされ、実行できません。
まだ質問があります: RDB はスナップショットを取得するときにスレッドをブロックしますか?
Xiao Zhang:
Redis には、RDB スナップショット ファイルを生成するための 2 つのコマンド、save と bgsave が用意されています。保存コマンドはメインスレッドで実行されるため、ブロッキングが発生します。 bgsave コマンドは、RDB ファイルを書き込むための子プロセスを作成し、メイン スレッドのブロックを回避します。これは Redis RDB のデフォルト構成でもあります。
インタビュアー:
RDB スナップショットを作成するときにデータを変更できますか?
Xiao Zhang:
保存は同期的であり、クライアント コマンドをブロックします。bgsave 中に変更できます。
インタビュアー:
Sobgsave がスナップショットを取得するときにデータ変更が許可されるという問題を、Redis はどのように解決しますか?
Xiao Zhang: (なぜまだ質問するのですか...方法がわかりません!)
うーん、これについてはよくわかりません...
インタビュー公式:
これは主に bgsave
のサブスレッドを使用して実装されます。具体的な操作は次のとおりです:
メイン スレッドが実行する場合読み取り操作、メイン スレッドと bgsave
サブプロセスは相互に影響しません;
メイン スレッドが書き込み操作を実行すると、変更されたデータのコピーがコピーされます。次に bgsave
サブプロセスはコピー データ RDB ファイルを書き込みます。このプロセス中、メインスレッドは元のデータを直接変更できます。
Redis による RDB の実行頻度は非常に重要であることに注意してください。これはスナップショット データの整合性と Redis の安定性に影響するため、Redis 4.0 以降は、追加の AOF と RDB の混合データ永続化メカニズム : データを RDB 形式でファイルに書き込み、後続の操作コマンドを AOF 形式でファイルに保存します。これにより、確実に再起動されるだけでなく、 Redis の速度は向上しますが、データ損失のリスクも軽減されます。
シャオ・チャン:
勉強になりました。
インタビュアー:
それでは、Redis がどのようにして高可用性を実現しているのか教えていただけますか?
Xiao Zhang:
Redis で高可用性を実現するには、マスター/スレーブ レプリケーション、センチネル モード、Redis クラスターの 3 つの主な方法があります。
マスター/スレーブ レプリケーション
以前の Redis サーバーから複数のスレーブ Redis サーバーにデータを同期します (つまり、マスター/スレーブ モデル)。これは MySQL に似ています。マスター/スレーブ レプリケーションの原理は同じです。
Sentinel モード
Redis マスター/スレーブ サービスを使用すると、問題が発生します。マスター/スレーブサーバーが表示される 障害が発生した場合、手動で復旧する必要がある この問題を解決するために、Redis ではセンチネル モードが追加されました (センチネル モードはマスター サーバーとスレーブ サーバーを監視し、自動ディザスター リカバリー機能を提供するため)。
Redis クラスター (クラスター)
Redis クラスターは、Redis 3.0 に基づいた分散型および分散型のオペレーティング モードです。このバージョンで開始されたクラスター ソリューションは、データをさまざまなサーバーに分散して、システムの単一マスター ノードへの依存を軽減し、それによって Redis サービスの読み取りおよび書き込みパフォーマンスを向上させます。
インタビュアー:
センチネル モードを使用して、データのコピーが存在し、可用性を監視するセンチネルがあることを確認します。マスターがダウンすると、スレーブが選択されます。ノードはマスター ノードであり、実稼働環境のニーズをすでに満たしています。それでは、なぜ依然としてクラスター モードを使用する必要があるのでしょうか?
Xiao Zhang:
さて、センチネル モードは依然としてマスター/スレーブ モードです。マスター/スレーブ モードでは、スレーブ ノードを追加することで読み取り同時実行機能を拡張できます。書き込み容量とストレージ容量、ストレージ容量はマスターノードが搭載できる上限のみです。したがって、書き込み機能とストレージ機能を拡張するには、クラスター モードを導入する必要があります。
インタビュアー:
クラスター内には非常に多くのマスター ノードがあります。Redis クラスターは、保存するときにどのノードを選択するかをどのように決定しますか?
Xiao Zhang:
これはある種のハッシュ アルゴリズムを使用しているはずですが、よくわかりません。 。 。 ######インタビュアー: ###
はい、今日の面接はこれで終わりです。戻って面接の通知を待ちます。
Xiao Zhang:
わかりました、インタビュアーありがとうございます。Redis クラスターがノード選択をどのように実装するかを教えていただけますか?
インタビュアー:
Redis Cluster は、 一貫性のあるハッシュ アルゴリズムを使用してノード選択を実装します. 一貫性のあるハッシュ アルゴリズムが何であるかについては、戻って自分の目で確認してください。
Redis クラスターは、それ自体を 16384 個のスロットに分割します。ハッシュ スロットはデータ パーティションに似ています。各キーと値のペアは、そのキーに従ってハッシュ スロットにマッピングされます。具体的な実行プロセスは 2 つの主要なステップに分かれています。
CRC16 アルゴリズムに従って、キーと値のペアのキーに基づいて 16 ビット値を計算します。
次に、16 ビット値を 16384 を法として使用して、0 ~ 16383 の範囲の法を取得します。各法は、対応する番号を持つハッシュ スロットを表します。
各 Redis ノードは、スロットの一部の処理を担当します。マスター ノード ABC が 3 つある場合、各ノードが担当するスロットは次のとおりです:
これはクラスター ノードの選択を実装します。
推奨される学習: 「Redis ビデオ チュートリアル 」、「2022 年の最新 Redis 面接の質問と回答 」
以上がRedis の面接でよく聞かれる 12 の重要なポイント (回答付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisのデータモデルと構造には、5つの主要なタイプが含まれます。1。文字列:テキストまたはバイナリデータの保存に使用され、原子操作をサポートします。 2。リスト:キューとスタックに適した注文された要素コレクション。 3.セット:順序付けられていない一意の要素セット、セット操作をサポートします。 4。注文セット(sortedset):ランキングに適したスコアを持つ一意の要素セット。 5。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。

Redisのデータベースメソッドには、メモリ内データベースとキー価値ストレージが含まれます。 1)Redisはデータをメモリに保存し、速く読み取り、書き込みます。 2)キー価値のペアを使用してデータを保存し、キャッシュやNOSQLデータベースに適したリスト、コレクション、ハッシュテーブル、注文コレクションなどの複雑なデータ構造をサポートします。

Redisは、高速パフォーマンス、リッチデータ構造、高可用性とスケーラビリティ、持続性能力、幅広いエコシステムサポートを提供するため、強力なデータベースソリューションです。 1)非常に速いパフォーマンス:Redisのデータはメモリに保存され、非常に速い読み取り速度と書き込み速度が高く、高い並行性と低レイテンシアプリケーションに適しています。 2)豊富なデータ構造:さまざまなシナリオに適したリスト、コレクションなど、複数のデータ型をサポートします。 3)高可用性とスケーラビリティ:マスタースレーブの複製とクラスターモードをサポートして、高可用性と水平スケーラビリティを実現します。 4)持続性とデータセキュリティ:データの整合性と信頼性を確保するために、データの持続性がRDBとAOFを通じて達成されます。 5)幅広い生態系とコミュニティのサポート:巨大なエコシステムとアクティブなコミュニティにより、

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターは、Redisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール
