オープンソースの高度なキーバリューストアおよび適用可能なソリューションとして、Redisは「高性能」で「スケーラブル」なWebアプリケーションの構築においてますます中心的な役割を果たすようになりました。
今日のインターネットテクノロジーアーキテクチャでは、Redisは最も広く使用されているミドルウェアの1つになりました。これは、ミッドエンドからハイエンドのバックエンドエンジニアリングの技術面接でインタビュアーに最も人気のあるエンジニアリングスキルの1つでもあります。基本的なマスターするには、Redisの内部実装の詳細な原則をより深く理解する必要があります。
Redisに習熟している場合、お気に入りの会社に足を半分持っていると言っても過言ではありません。Redisの典型的なインタビューの質問を一緒に見てみましょう。面接担当者からあなたの顔を緑にするよう求められないでください!
これらのRedisインタビューの質問に加えて、建築家向けの完全なビデオチュートリアルとJavaに関する体系的な資料もまとめました。困っている友達は下のリンクをクリックして無料で入手できます!
リンク:1103806531パスワード:CSDN
Redisの基本的なインタビューの質問
1. Redisとは何ですか?その長所と短所を簡単に説明してください。
-
Redisは基本的に、memcachedによく似たKey-Valueタイプのメモリデータベースです。
-
データベース全体が操作のためにメモリに読み込まれ、非同期操作を通じて定期的にデータベースデータがハードディスクにフラッシュされて保存されます。
-
純粋なメモリ操作であるため、Redisは優れたパフォーマンスを発揮し、1秒あたり100,000を超える読み取りおよび書き込み操作を処理できます。これは、最も高速な既知のKey-Value DBです。
-
Redisの卓越性はパフォーマンスだけではありません。Redisの最大の魅力は、複数のデータ構造の保存をサポートしていることです。さらに、1つの値の最大制限は1Gです。1MBのデータしか保存できないmemcachedとは異なり、Redisは多くの便利な機能を実装するために使用できます。 。
-
たとえば、彼のリストをFIFO二重リンクリストとして使用して軽量の高性能メッセージキューサービスを実現し、彼のセットを使用して高性能タグシステムなどを作成します。
-
Redisは、保存されたKey-Valueの有効期限も設定できるため、memcachedの拡張バージョンとしても使用できます。
-
Redisの主な欠点は、データベースの容量が物理メモリによって制限され、大量のデータの高性能な読み取りと書き込みに使用できないことです。そのため、Redisの適切なシナリオは、主に高性能な操作と少量のデータを使用した計算に限定されます。
2. memcachedよりRedisの利点は何ですか?
-
memcachedのすべての値は単純な文字列で、redisはその代わりに、より豊富なデータ型をサポートしています
-
Redisはmemcachedよりもはるかに高速です
-
redisはデータを保持できます
3. Redisには5つのデータ型があり、各データ型はどこで使用されますか?
-
Str(キャッシュ)
-
リスト(メッセージキュー)
-
ハッシュ(対応する属性の値を取得するための一意の識別子としてのユーザーID +対応する属性名)
-
セット(セットはリストに似ています。特別な機能は、ウェイトを自動的にソートできることです:Weiboで2人の共通の友達を見つけます)
-
ソート済みセットの使用シナリオソート済みセットはセットに似ていますが、セットは自動的に順序付けされず、ソート済みセットはユーザーが優先度(スコア)パラメーターを指定することでメンバーをソートでき、順番に挿入されます。つまり、自動ソートです。 。
たとえば、Twitterの公開タイムラインは、公開時刻をスコアとして保存できるため、取得時に時刻で自動的にソートされます。
4. Redisにはどのようなデータ消去戦略がありますか?
noeviction:メモリ制限に達し、クライアントがより多くのメモリを使用するコマンドを実行しようとしたときにエラーを返します(ほとんどの書き込みコマンドですが、DELといくつかの例外)。
allkeys-lru:新しく使用されたデータにストレージ用のスペースができるように、最も使用頻度の低いキー(LRU)を再利用しようとします。
Volatile-lru:使用頻度の最も低いキー(LRU)を再利用しようとしますが、期限切れのキーのセットでのみ使用して、新しく追加されたデータにストレージ用のスペースを確保します。
allkeys-random:ランダムキーを再利用して、新しく追加されたデータにストレージ用のスペースを確保します。
揮発性ランダム:ランダムキーをリサイクルすると、新しく追加されたデータ用のスペースを保存できますが、期限切れのコレクション内のキーのみが保存されます。
Volatile-ttl:期限切れのコレクション内のキーを再利用し、存続時間(TTL)が短い方のキーを再利用することを優先して、新しく追加されたデータにストレージ用のスペースを確保します。
5.文字列型の値の最大ストレージ容量はどれくらいですか?
512M
6.なぜRedisはすべてのデータをメモリに配置する必要があるのですか?
最速の読み取りおよび書き込み速度を実現するために、Redisはすべてのデータをメモリに読み取り、非同期でディスクにデータを書き込みます。
したがって、redisには高速でデータの永続化という特性があります。データがメモリに保存されていない場合、ディスクI / O速度はredisのパフォーマンスに深刻な影響を与えます。
最大メモリ使用量が設定されている場合、既存のデータレコードの数がメモリ制限に達した後は、新しい値を挿入できません。
7. Redisクラスターソリューションは何をすべきですか?オプションは何ですか?
1)コード。
Codisは現在、ほとんどのクラスタリング方式を使用しています。基本的にはtwemproxyと同じ効果ですが、ノード数が変更されたときに古いノードのデータを新しいハッシュノードに復元できることをサポートしています。
2)redis cluster3.0に付属するクラスター
その特徴は、彼の分散アルゴリズムは一貫したハッシュではなく、ハッシュスロットの概念であり、ノード設定スレーブノードに対する独自のサポートです。
3)ビジネスコード層で実現
いくつかの無関係なredisインスタンスを開始し、コードレイヤーでキーに対してハッシュ計算を実行してから、対応するredisインスタンスに移動してデータを操作します。
この方法では、比較的高レベルのハッシュコードが必要です。いくつかの考慮事項には、ノード障害後の代替アルゴリズムスキーム、データショック後の自動スクリプト回復、インスタンスの監視などがあります。
8. Redisクラスターソリューションによってクラスター全体が使用できなくなるのはどのような場合ですか?
3つのノードA、B、Cを持つクラスター。レプリケーションモデルがない場合、ノードBに障害が発生すると、5501〜11000の範囲のスロットがないため、クラスター全体が使用できなくなります。
9. MySQLには2000wのデータがあり、redisには20wのデータしかありません。redisのデータがすべてホットデータであることを確認するにはどうすればよいですか?
redisメモリデータセットのサイズが特定のサイズに達すると、データ削除戦略が実装されます。
10. Redisハッシュスロットの概念について話してください。
Redisクラスターは一貫したハッシュを使用しませんが、ハッシュスロットの概念を導入しています。Redisクラスターには16,384のハッシュスロットがあります。
各キーがCRC16チェックに合格すると、16384を変調して配置するスロットを決定し、クラスターの各ノードがハッシュスロットの一部を担当します。
11. Redisクラスターのマスター/スレーブレプリケーションモデルとは何ですか?
一部のノードに障害が発生したり、ほとんどのノードが通信できない場合でもクラスターを使用できるようにするために、クラスターはマスター/スレーブレプリケーションモデルを使用し、各ノードにはN-1個のレプリカがあります。
12. Redisクラスターで書き込み操作が失われますか?どうして?
Redisは強力なデータ整合性を保証しません。つまり、実際には、特定の条件下でクラスターが書き込み操作を失う可能性があります。
Redisに適したシナリオは何ですか
1.セッションキャッシュ
Redisを使用するために最も一般的に使用されるシナリオの1つは、セッションキャッシュです。
Redisを使用して他のストレージ(Memcachedなど)よりもセッションをキャッシュする利点は、Redisが永続性を提供することです。
2.全ページキャッシュ(FPC)
基本的なセッショントークンに加えて、Redisは非常にシンプルなFPCプラットフォームも提供します。
一貫性の問題に戻ると、Redisインスタンスが再起動されても、ディスクの永続性が原因でページの読み込み速度が低下することはありません。これは、PHPのローカルFPCと同様に大幅に改善されています。
3.キュー
メモリストレージエンジンの分野におけるReidの大きな利点の1つは、リストとセットの操作を提供できることです。これにより、Redisは優れたメッセージキュープラットフォームとして使用できます。
Redisがキューとして使用する操作は、リスト上のローカルプログラミング言語(Pythonなど)のプッシュ/ポップ操作に似ています。
4.リーダーボード/カウンター
Redisは、メモリ内の数値を増分または減分する操作を非常に適切に実装しています。
SetとSorted Setを使用すると、これらの操作を非常に簡単に実行できます。
したがって、ソートされたセットから上位10人のユーザーを取得する必要があります。これを「user_scores」と呼び、次のように実行するだけです。
もちろん、これはユーザーのスコアに基づいて昇順で並べ替えていることを前提としています。ユーザーとそのスコアを返すには、次のようにする必要があります。
ZRANGE user_scores 0 10 WITHSCORES
Agora GamesはRubyで実装された良い例であり、そのリーダーボードはRedisを使用してデータを格納します。
5.パブリッシュ/サブスクライブ
実際、パブリッシュ/サブスクライブには多くの使用シナリオがあります。私は人々がソーシャルネットワーク接続でそれを使用し、パブリッシュ/サブスクライブに基づくスクリプトトリガーとして使用でき、Redisのパブリッシュ/サブスクライブ機能を使用してチャットシステムを構築することも確認しました。
やっと
この記事が皆様のお役に立てば幸いです。
私はまた、Javaのコアナレッジポイント、インタビュートピック、最新の20年間のインターネットの実際の質問や電子書籍など、Javaに関する建築家および体系的な資料の完全なビデオチュートリアルをまとめました。困っている友達は下のリンクをクリックして無料で入手できます!
リンク:1103806531パスワード:CSDN