ホームページ  >  記事  >  データベース  >  史上最も完全な Redis インタビューの 50 の質問と回答

史上最も完全な Redis インタビューの 50 の質問と回答

青灯夜游
青灯夜游転載
2019-11-26 17:41:534951ブラウズ

Redis に関する 50 のインタビューの質問をインターネットで見ましたが、回答はありませんでした。私も以前、この Redis のインタビューの質問に対する答えを探していたので、今日はその答えを共有します。私は、この Redis 面接の質問と回答のセットを作成するのに多くの時間を費やしました。これが皆さんのお役に立てば幸いです。

史上最も完全な Redis インタビューの 50 の質問と回答

これらの Redis 面接の質問を理解すれば、基本的に面接の達人になり、面接官に勝つことができます (笑~

1)。それはレディスですか?

Redis は、基本的に、memcached と同様に、Key-Value タイプのメモリ内データベースです。データベース全体が操作のためにメモリにロードされ、データベース データは、ストレージのためにハードディスクにフラッシュされます。非同期操作を定期的に実行します。 Redis は純粋なメモリ操作であるため、優れたパフォーマンスを備え、1 秒あたり 100,000 を超える読み取りおよび書き込み操作を処理でき、既知の中で最も高速に実行できる Key-Value DB です。

Redis の優秀さはパフォーマンスだけではありません。Redis の最大の魅力は、さまざまなデータ構造の保存に対応していることです。また、単一の値の最大制限は 1GB です。memcached とは異なり、 Redis は、List を使用した FIFO 二重リンク リストの作成、軽量で高性能なメッセージ キュー サービスの実装、Set を使用した高性能メッセージ キュー サービスの作成など、多くの便利な機能の実装に使用されます。タグシステムなど。

さらに、Redis は保存された Key-Value の有効期限を設定できるため、memcached の拡張バージョンとしても使用できます。 Redis の主な欠点は、データベース容量が物理メモリによって制限され、大量のデータの高パフォーマンスな読み取りおよび書き込みには使用できないことです。そのため、Redis に適したシナリオは主に高パフォーマンスの操作と少量の計算に限定されます。データの。

トピックの推奨事項: 2020 Redis 面接の質問 (最新)

2. memcached と比較した Redis の利点は何ですか?

(1) memcached のすべての値は単純な文字列であり、redis はその代替として、より豊富なデータ型をサポートします

(2) Redis は memcached よりも高速です はるかに高速です

(3) Redis はデータを永続化できます

##3. Redis はどのようなデータ型をサポートしていますか?

文字列、リスト、セット、ソートされたセット、ハッシュ

4. Redis は主にどのような物理リソースを消費しますか?

Redis は、主にメモリに依存するメモリベースの高性能データベースです。

5. Redis の正式名は何ですか?

Remote Dictionary Server

6. Redis にはどのようなデータ削除戦略がありますか?

noeviction: メモリ制限に達し、クライアントがより多くのメモリを使用するコマンドを実行しようとするとエラーを返します (ほとんどの書き込みコマンド、ただし DEL といくつかの例外)

allkeys-lru: 新しく追加されたデータ用の余地を確保するために、最も使用されていないキー (LRU) をリサイクルしてみてください。

volatile-lru: 最も使用されていないキー (LRU) のリサイクルを試みますが、新しく追加されたデータを保存する余地を残すため、有効期限が切れたセット内のキーのみをリサイクルします。

allkeys-random: 新しく追加されたデータ用のスペースを確保するために、ランダム キーをリサイクルします。

volatile-random: ランダム キーをリサイクルして、新しく追加されたデータ用のスペースを確保しますが、有効期限が切れたセット内のキーのみに対応します。

volatile-ttl: 期限切れのセット内のキーをリサイクルし、有効期間 (TTL) の短いキーを優先して、新しく追加されたデータを保存するためのスペースを確保します。

7. Redis が Windows バージョンを正式に提供しないのはなぜですか?

現在の Linux バージョンは非常に安定しており、ユーザー数も多いため、互換性やその他の問題が発生する Windows バージョンを開発する必要はありません。

8. 文字列型の値が格納できる最大容量はどれくらいですか?

512M

9. Redis がすべてのデータをメモリに配置する必要があるのはなぜですか?

最速の読み取りおよび書き込み速度を実現するために、Redis はすべてのデータをメモリに読み取り、そのデータを非同期でディスクに書き込みます。つまり、redis は高速でデータの永続性が高いという特徴を持っています。データがメモリに配置されていない場合、ディスク I/O 速度は Redis のパフォーマンスに重大な影響を与えます。メモリがどんどん安くなっている現在、redis の人気はますます高まるでしょう。

最大使用メモリが設定されている場合、データレコード数がメモリ制限に達すると、新しい値を挿入できなくなります。

10. Redis クラスター ソリューションはどのように実装する必要がありますか?計画は何ですか?

1), twemproxy は、一般的な概念はプロキシ方式に似ており、使用方法は通常の Redis と変わりません その配下に複数の Redis インスタンスを設置した後、使用する場合は Redis を配置する場所を変更しますConnect to twemproxy に接続する必要がある場合、リクエストをプロキシとして受信し、一貫したハッシュ アルゴリズムを使用してリクエストを特定の Redis に転送し、結果を twemproxy に返します。これは使いやすく (redis と比較して、接続ポートを変更するだけで済みます)、古いプロジェクトを拡張するための最初の選択肢です。問題: twemproxy 自身の単一ポート インスタンスの圧力により、コンシステント ハッシュを使用した後、redis ノードの数が変化すると計算値が変化し、データを新しいノードに自動的に移動できなくなります。

2)、現在最も一般的に使用されているクラスター ソリューションである codis は、基本的に twemproxy と同じ効果がありますが、ノード数が変更された場合に古いノード データを新しいハッシュ ノードに復元することをサポートしています。

3)、rediscluster3.0に付属するクラスターは、分散アルゴリズムが一貫性のあるハッシュではなくハッシュスロットの概念を採用していることと、独自のノード設定スレーブノードのサポートが特徴です。詳細については公式ドキュメントを参照してください。
4. ビジネス コード レイヤーで実装され、関連性のない複数の Redis インスタンスを作成し、コード レイヤーでキーのハッシュ計算を実行し、対応する Redis インスタンス上でデータを操作します。この方法にはハッシュ レイヤー コードに対する要件が比較的高く、ノード障害後の代替アルゴリズム ソリューション、データ ショック後の自動スクリプト回復、インスタンスの監視などが考慮されます。

11. Redis クラスター ソリューションによってクラスター全体が使用できなくなるのは、どのような状況ですか?

3 つのノード A、B、C があり、レプリケーション モデルがないクラスターでは、ノード B に障害が発生すると、クラスター全体が 5501- の範囲のスロットが不足していると判断します。 11000。利用できません。

12. MySQL には 2,000 万のデータがありますが、redis には 2,000 万のデータのみが保存されます。redis 内のデータがホット データであることを確認するにはどうすればよいですか?

Redis メモリ データ セットのサイズが特定のサイズに増加すると、データ削除戦略が実装されます。

13. Redis に適したシナリオは何ですか?

(1) セッション キャッシュ Redis を使用するために最も一般的に使用されるシナリオの 1 つは、セッション キャッシュです。 Redis を使用して他のストレージ (Memcached など) 上でセッションをキャッシュする利点は、Redis が永続性を提供することです。一貫性を厳密に必要としないキャッシュを維持する場合、ユーザーのショッピング カート情報がすべて失われると、ほとんどの人は不満を抱くでしょう。幸いなことに、Redis は長年にわたって改良されてきたため、Redis を適切に使用してセッション ドキュメントをキャッシュする方法を見つけるのは簡単です。有名な商用プラットフォーム Magento でも Redis プラグインが提供されています。

(2)、フル ページ キャッシュ (FPC) 基本的なセッション トークンに加えて、Redis は非常にシンプルな FPC プラットフォームも提供します。一貫性の問題に戻りますが、Redis インスタンスが再起動されても、ユーザーはディスクの永続性によりページの読み込み速度が低下することはありません。これは、PHP ローカル FPC と同様に、大きな改善です。再び Magento を例に挙げると、Magento は Redis をフルページ キャッシュ バックエンドとして使用するためのプラグインを提供します。さらに、WordPress ユーザー向けに、Pantheon には非常に優れたプラグイン wp-redis があり、閲覧したページをできるだけ早く読み込むのに役立ちます。

(3) メモリ ストレージ エンジンの分野におけるキュー Redis の大きな利点の 1 つは、リストおよびセット操作を提供することです。これにより、Redis は優れたメッセージ キュー プラットフォームになります。 Redis によってキューとして使用される操作は、ローカル プログラミング言語 (Python など) のリストのプッシュ/ポップ操作に似ています。 Google で「Redis キュー」をすぐに検索すると、すぐに多数のオープンソース プロジェクトが見つかります。これらのプロジェクトの目的は、Redis を使用して、さまざまなキューのニーズを満たす非常に優れたバックエンド ツールを作成することです。たとえば、Celery には Redis をブローカーとして使用するバックエンドがあり、ここから確認できます。

(4)、ランキング リスト/カウンター Redis は、メモリ内の数値を増減する操作を非常に適切に実装します。 Sets と Sorted Sets を使用すると、これらの操作を非常に簡単に実行できます。Redis が提供するのは、これら 2 つのデータ構造だけです。したがって、ソートされたセットから上位 10 人のユーザーを取得するには、それらを「user_scores」と呼びます。次のようにするだけです。 もちろん、これはユーザーのスコアに基づいて実行していることを前提としています。ユーザーとユーザーのスコアを返したい場合は、次のように実行する必要があります: ZRANGE user_scores 0 10 WITHSCORESAgora Games は良い例で、Ruby で実装されており、そのランキングはデータの保存に Redis を使用しています。 。

(5)、パブリッシュ/サブスクライブ 最後 (ただし重要なこと) は、Redis のパブリッシュ/サブスクライブ機能です。パブリッシュ/サブスクライブには実際に多くの使用例があります。人々がこれをソーシャル ネットワーク接続で使用したり、パブリッシュ/サブスクライブ ベースのスクリプトのトリガーとして使用したり、Redis のパブリッシュ/サブスクライブ機能を使用してチャット システムを構築したりしているのを見てきました。 (いいえ、これは本当です。ぜひチェックしてみてください。)

14. Redis でサポートされる Java クライアントは何ですか?公式で推奨されているのはどれですか?

Redisson、Jedis、レタスなど。公式では Redisson を使用することを推奨しています。

15. Redis と Redisson の関係は何ですか?

Redisson は、ユーザーが分散環境、ConcurrentMap、List で一部の Java オブジェクト (ブルーム フィルター、BitSet、Set、SetMultimap、ScoredSortedSet、SortedSet、Map) を簡単に実装できるようにする高度な分散調整 Redis クライアントです。 、ListMultimap、Queue、BlockingQueue、Deque、BlockingDeque、セマフォ、Lock、ReadWriteLock、AtomicLong、CountDownLatch、パブリッシュ/サブスクライブ、HyperLogLog)。

16. ジェディスとレディソンの長所と短所は何ですか?

Jedis は、Java の Redis によって実装されたクライアントです。その API は、Redis コマンドに対する比較的包括的なサポートを提供します。Redisson は、分散型でスケーラブルな Java データ構造を実装します。Jedis と比較して、その機能は比較的シンプルです。文字列操作はサポートされておらず、並べ替え、トランザクション、パイプライン、パーティションなどの Redis 機能もサポートされていません。 Redisson の目的は、ユーザーの懸念事項を Redis から切り離すことを促進し、ユーザーがビジネス ロジックの処理により集中できるようにすることです。

17. Redis のパスワードを設定し、パスワードを確認するにはどうすればよいですか?

パスワードの設定: config set requirepass 123456 認証パスワード: auth 123456

18. Redis ハッシュ スロットの概念について話しますか?

Redis クラスターは一貫したハッシュを使用しませんが、ハッシュ スロットの概念を導入しています。Redis クラスターには 16384 のハッシュ スロットがあります。各キーは、CRC16 チェックに合格した後、16384 のモジュロを取ることによって決定されます。スロットを配置する場合、クラスター内の各ノードはハッシュ スロットの一部を担当します。

19. Redis クラスターのマスター/スレーブ レプリケーション モデルとは何ですか?

一部のノードに障害が発生した場合、またはほとんどのノードが通信できなくなった場合でもクラスターを引き続き使用できるようにするために、クラスターはマスター/スレーブ レプリケーション モデルを使用し、各ノードには N-1 個のレプリカが存在します。

20. Redis クラスターで書き込み操作は失われますか?なぜ?

Redis はデータの強い整合性を保証しません。つまり、実際には、特定の条件下でクラスターが書き込み操作を失う可能性があります。

21. Redis クラスターはどのようにレプリケートされますか?

非同期レプリケーション

22. Redis クラスター内のノードの最大数はどれくらいですか?

16384。

23. Redis クラスターのデータベースを選択するにはどうすればよいですか?

Redis クラスターは現在データベースを選択できず、デフォルトはデータベース 0 です。

24. Redis の接続をテストするにはどうすればよいですか?

ping

#25. Redis でのパイプラインの用途は何ですか?

リクエスト/レスポンス サーバーは、古いリクエストがまだ応答されていない場合でも、新しいリクエストを処理できます。これにより、応答を待たずに複数のコマンドをサーバーに送信し、最終的にその応答を 1 ステップで読み取ることができます。これはパイプライン処理であり、数十年にわたって広く使用されてきた技術です。たとえば、多くの POP3 プロトコルはこの機能のサポートを実装しており、サーバーから新しい電子メールをダウンロードするプロセスが大幅に高速化されます。

26. Redis トランザクションを理解するにはどうすればよいですか?

#トランザクションは単一の分離された操作です。トランザクション内のすべてのコマンドはシリアル化され、順番に実行されます。トランザクションの実行中、他のクライアントから送信されたコマンド要求によって中断されることはありません。トランザクションはアトミック操作です。トランザクション内のすべてのコマンドが実行されるか、まったく実行されないかのどちらかです。

27. Redis トランザクションに関連するコマンドは何ですか?

マルチ、実行、破棄、監視 ##28. Redis キーの有効期限と永続的な有効性をそれぞれ設定するにはどうすればよいですか? EXPIRE および PERSIST コマンド。

29. Redis はどのようにメモリを最適化しますか?

できるだけハッシュ テーブル (ハッシュ) を使用します。ハッシュ テーブル (ハッシュ テーブルに格納される数値が小さいことを意味します) は非常に少量のメモリを使用するため、データ モデルを可能な限り抽象化する必要があります。ハッシュテーブル内で可能。たとえば、Web システムにユーザー オブジェクトがある場合は、ユーザーの名前、姓、電子メール、パスワードに個別のキーを設定せず、すべてのユーザー情報をハッシュ テーブルに保存します。

30. Redis のリサイクル プロセスはどのように機能しますか? #クライアントが新しいコマンドを実行し、新しいデータを追加しました。 Redi はメモリ使用量をチェックし、maxmemory の制限を超えている場合は、設定されたポリシーに従ってリサイクルされます。新しいコマンドが実行されるなど。したがって、私たちは常に境界に到達し、その後常に境界の下に戻ってリサイクルすることにより、常にメモリ制限の境界を超えています。コマンドの結果として大量のメモリが使用される場合 (大規模なセットの共通部分を新しいキーに保存する場合など)、このメモリ使用量がメモリ制限を超えるまでにそれほど時間はかかりません。

31. Redis のリサイクルにはどのようなアルゴリズムが使用されていますか?

#LRU アルゴリズム

32. Redis はどのようにして大量のデータを挿入しますか?

Redis 2.6 以降、redis-cli は、大量のデータ挿入作業を実行するためのパイプ モードと呼ばれる新しいモードをサポートします。

33. Redis パーティショニングが必要な理由は何ですか?

パーティショニングにより、Redis はより大きなメモリを管理できるようになり、Redis はすべてのマシンのメモリを使用できるようになります。パーティションがないと、最大 1 台のマシンのメモリしか使用できません。パーティショニングを使用すると、コンピュータを追加するだけで Redis の計算能力を 2 倍にすることができ、コンピュータとネットワーク カードの数が増えると Redis のネットワーク帯域幅も 2 倍になります。

34. どのような Redis パーティション実装ソリューションが利用できるかご存知ですか?

クライアント側のパーティショニングとは、データがどの Redis ノードに保存されるか、またはどの Redis ノードから読み取られるかをクライアントがすでに決定していることを意味します。ほとんどのクライアントはすでにクライアント側パーティショニングを実装しています。プロキシのパーティショニングとは、クライアントがリクエストをプロキシに送信し、プロキシがデータの書き込みまたは読み取りのためにどのノードに移動するかを決定することを意味します。エージェントは、パーティション ルールに基づいてリクエストする Redis インスタンスを決定し、Redis 応答結果に基づいてクライアントにインスタンスを返します。 Redis と memcached のプロキシ実装は Twemproxy クエリ ルーティング (クエリ ルーティング) です。これは、クライアントが任意の Redis インスタンスをランダムにリクエストし、Redis がそのリクエストを正しい Redis ノードに転送することを意味します。 Redis Cluster はハイブリッド形式のクエリ ルーティングを実装していますが、ある Redis ノードから別の Redis ノードにリクエストを直接転送するのではなく、クライアントの助けを借りて正しい Redis ノードに直接リダイレクトします。

35. Redis パーティションの欠点は何ですか?

複数のキーを含む操作は通常サポートされていません。たとえば、2 つのコレクションは異なる Redis インスタンスに保存されている可能性があるため、それらを交差させることはできません (実際には、この状況を解決する方法はありますが、交差コマンドを直接使用することはできません)。複数のキーを同時に操作する場合、Redis トランザクションは使用できません。パーティショニングの粒度がキーであるため、非常に長いソート キー (非常に大きなソート セットのような単一の巨大なキー) を使用してデータセットをシャーディングすることはできません。パーティションを使用する場合、データ処理は非常に複雑になります。たとえば、バックアップの場合、異なる Redis インスタンスおよびホストから RDB/AOF ファイルを同時に収集する必要があります。パーティショニング時の動的なスケールアップまたはスケールダウンは複雑になる場合があります。 Redis クラスターは、実行時に Redis ノードを追加または削除するため、ユーザーに対して最大限透過的なデータのリバランスを実現できますが、他の一部のクライアント パーティショニングまたはプロキシ パーティショニング方法では、この機能がサポートされていません。ただし、この問題をより適切に解決できるプレシャーディング テクノロジもあります。

36. Redis の永続データとキャッシュを拡張するにはどうすればよいですか?

Redis をキャッシュとして使用する場合は、コンシステント ハッシュを使用して動的な拡張と縮小を実現します。 Redis を永続ストレージとして使用する場合は、固定のキーとノードのマッピング関係を使用する必要があり、ノードの数は一度決定すると変更できません。それ以外の場合 (つまり、Redis ノードを動的に変更する必要がある場合)、実行時にデータのバランスを再調整できるシステムを使用する必要があります。現在、これを実行できるのは Redis クラスターのみです。

37. 分散Redisは初期段階で行うべきでしょうか、それとも規模が大きくなった後の段階で行うべきでしょうか?なぜ?

Redis は非常に軽量であるため (単一インスタンスで使用するメモリは 1M のみ)、将来の拡張を防ぐ最善の方法は、最初にさらに多くのインスタンスを起動することです。サーバーが 1 台しかない場合でも、パーティションを使用して同じサーバー上で複数のインスタンスを起動することで、最初から Redis を分散方式で実行できます。最初にさらにいくつかの Redis インスタンス (32 インスタンスや 64 インスタンスなど) をセットアップすることは、ほとんどのユーザーにとって面倒かもしれませんが、長期的には犠牲にする価値があります。この場合、データが増大し続け、より多くの Redis サーバーが必要になった場合、必要なのは Redis インスタンスを 1 つのサービスから別のサーバーに移行するだけです (再パーティション化の問題を考慮する必要はありません)。別のサーバーを追加したら、Redis インスタンスの半分を最初のマシンから 2 番目のマシンに移行する必要があります。

38. Twemproxy とは何ですか?

Twemproxy は Twitter によって維持される (キャッシュ) プロキシ システムであり、Memcached の ASCII プロトコルと Redis プロトコルをプロキシします。これは C 言語で書かれたシングルスレッド プログラムであり、非常に高速に実行されます。 Apache 2.0ライセンスを使用したオープンソースソフトウェアです。 Twemproxy は自動パーティショニングをサポートしており、プロキシ Redis ノードの 1 つが使用できない場合、そのノードは自動的に除外されます (これにより、元のキーとインスタンスのマッピング関係が変更されるため、Redis をキャッシュとして使用する場合にのみ Twemproxy を使用する必要があります)。複数の Twemproxy インスタンスを起動して、クライアントを任意の Twemproxy インスタンスに接続できるため、Twemproxy 自体には単一点の問題はありません。 Twemproxy は Redis クライアントとサーバーの間の中間層であり、パーティション機能の処理が複雑ではなく、比較的信頼性が高い必要があります。

39.どのクライアントがコンシステント ハッシュをサポートしていますか?

Redis-rb、Predis など

40. Redis と他の Key-Value ストアの違いは何ですか?

Redis はより複雑なデータ構造を持ち、それらに対するアトミックな操作を提供します。これは他のデータベースとは異なる進化の過程です。 Redis のデータ型は基本的なデータ構造に基づいており、追加の抽象化を必要とせずにプログラマにとって透過的です。 Redis はメモリ内で実行されますが、ディスクに永続化できるため、さまざまなデータ セットの高速読み取りおよび書き込みを実行するときは、メモリを考慮する必要があります。データ量はハードウェア メモリより大きくてはなりません。インメモリ データベースのもう 1 つの利点は、ディスク上の同じ複雑なデータ構造と比較して、メモリ内での操作が非常にシンプルであるため、Redis は内部の複雑性が高くても多くのことを実行できることです。また、ディスク形式に関しては、ランダム アクセスを必要としないため、コンパクトな追加生成となります。

41. Redis のメモリ使用量はどのくらいですか?

例を示します。100 万のキーと値のペア (キーは 0 ~ 999999 で、値は文字列「hello world」) は、私の 32 ビット Mac ノートブックで 100MB を使用します。同じデータをキーに入れるのに必要な容量は 16MB だけですが、これはキー値のオーバーヘッドが大きいためです。 Memcached での実行でも同様の結果が得られますが、Redis は型情報、参照カウントなどを記録するため、オーバーヘッドは Redis よりわずかに小さくなります。もちろん、キーと値のペアが大きい場合、この 2 つの比率ははるかに良くなります。 64 ビット システムでは、ポインターが 8 バイトを占有するため、特にキーと値のペアが小さい場合、32 ビット システムよりも多くのメモリ オーバーヘッドが必要になります。ただし、当然のことながら、64 ビット システムはより大きなメモリをサポートするため、大規模な Redis サーバーを実行するには多かれ少なかれ 64 ビット システムが必要になります。

42. Redis のメモリ使用量を削減するにはどのような方法がありますか?

32 ビット Redis インスタンスを使用している場合は、通常、小さな Key-Value が多数存在するため、ハッシュ、リスト、ソート セット、セットなどのコレクション型データを有効に活用できます。一緒に収納してよりコンパクトにお使いいただけます。

43. Redis の使用状況とステータス情報を表示するには、どのコマンドを使用しますか?

info

44. Redis のメモリが不足するとどうなりますか?

設定された上限に達すると、Redis 書き込みコマンドはエラー メッセージを返します (ただし、読み取りコマンドは正常に戻ることができます)。または、Redis をキャッシュとして使用して構成削除を使用することもできます。 Redis がメモリに到達すると、古いコンテンツは一定の制限時間内にフラッシュされます。

45. Redis はシングルスレッドですが、マルチコア CPU の使用率を改善するにはどうすればよいですか?

複数の Redis インスタンスを同じサーバーにデプロイし、それらを異なるサーバーとして使用できます。いずれにしても 1 つのサーバーでは不十分な場合があるため、複数の CPU を使用したい場合は、シャーディングを検討できます。

46. Redis インスタンスには最大でいくつのキーを保存できますか?

List、Set、Sorted Set には最大でいくつの要素を保存できますか?理論上、Redis は最大 232 個のキーを処理でき、実際のテストでは、各インスタンスには少なくとも 2 億 5,000 万個のキーが保存されました。いくつかのより大きな値をテストしています。リスト、セット、ソートされたセットは 232 個の要素を保持できます。つまり、Redis のストレージ制限は、システムで利用可能なメモリの値です。

47. Redis の一般的なパフォーマンスの問題と解決策は?

(1) マスターは、R​​DB メモリ スナップショットや AOF ログ ファイルなどの永続化作業を行わないことが最善です。

(2) データが重要な場合、スレーブは有効にする必要があります。 AOF バックアップ データ、ポリシーは 1 秒に 1 回同期するように設定されています

(3) マスター/スレーブ レプリケーションの速度と接続の安定性を考慮すると、マスターとスレーブが同じ LAN 内にあることが最適です

(4) 大きな負荷がかかるマスター ライブラリにスレーブ ライブラリを追加しないようにしてください

(5) マスター/スレーブ レプリケーションにグラフ構造を使用しないでください。一方向のリンク リスト構造を使用します。つまり、マスター <- スレーブ 1 <- スレーブ 2 <- スレーブ 3... この構造は、単一障害点の問題を解決し、マスターをスレーブに置き換えるのに便利です。マスターがハングアップした場合は、他のすべてを変更せずに、すぐに Slave1 をマスターとして有効にすることができます。

48. Redis はどのような永続化メソッドを提供しますか?

RDB 永続モードでは、指定した時間間隔でデータのスナップショットを保存できます。AOF 永続モードでは、サーバーに書き込まれる各操作が記録されます。サーバーが再起動すると、これらのコマンドが再実行され、元のデータが復元されます。AOF コマンドRedis プロトコルを使用して、各書き込み操作をファイルの末尾に追加して保存します。Redis は、AOF ファイルのサイズが大きくなりすぎないように、バックグラウンドで AOF ファイルを書き換えることもできます。サーバーの実行中に保存されるファイルが存在する場合、永続化メソッドを使用することはできません。両方の永続化メソッドを同時に有効にすることもできます。この場合、redis が再起動されると、元のデータを復元するために AOF ファイルが最初にロードされます。通常の状況では、AOF ファイルによって保存されたデータ セットは、RDB ファイルによって保存されたデータ セットよりも完全であるためです。最も重要なことは、RDB 永続化メソッドと AOF 永続化メソッドの違いを理解することです。RDB 永続化メソッドから始めましょう。

49. 適切な永続化方法を選択するにはどうすればよいですか?

一般的に、PostgreSQL と同等のデータ セキュリティを実現したい場合は、両方の永続化機能を同時に使用する必要があります。データを非常に重視していても、数分以内にデータが失われる可能性がある場合は、RDB 永続性を使用するだけで済みます。多くのユーザーは AOF 永続性のみを使用しますが、この方法は推奨されません。RDB スナップショットを定期的に生成することはデータベースのバックアップに非常に便利であり、RDB は AOF よりも高速にデータ セットを復元します。また、RDB を使用すると AOF プログラムのバグも回避できます。先に述べた。

50. 構成の変更は、Redis を再起動しなくてもリアルタイムで有効になりますか?

インスタンスを実行するための多くの構成オプションは、再起動を実行せずに CONFIG SET コマンドで変更できます。 Redis 2.2 以降では、Redis を再起動せずに、AOF から RDB のスナップショット永続化またはその他の手段に切り替えることができます。詳細については、「CONFIG GET *」コマンドを取得してください。ただし、Redis プログラムを新しいバージョンにアップグレードする場合や、CONFIG コマンドで現在サポートされていない構成パラメーターを変更する必要がある場合など、再起動が必要になる場合があります。

推奨される学習: Redis ビデオ チュートリアル

以上が史上最も完全な Redis インタビューの 50 の質問と回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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