技術共有

Redis の運用および保守に関するインタビューの質問

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

面接の準備を進める皆さんを支援するために、Redis についてまだよくわからない学生のために、面接中にパニックにならず内定獲得に向けて努力できるように、Redis 面接でよくある質問 40 個をまとめました。

1.Redisとは何ですか?

Redis は完全にオープンソースで無料で、BSD プロトコルに準拠しており、高性能のキーと値のデータベースです。

Redis には、他のキー/値キャッシュ製品と比較して、次の 3 つの特徴があります。

  • Redis はデータの永続化をサポートしており、メモリ内のデータをディスクに保存し、再起動時に再ロードして使用できます。

  • Redis は、単純なキーと値の型のデータをサポートするだけでなく、リスト、セット、zset、ハッシュなどのデータ構造のストレージも提供します。

  • Redis はデータ バックアップ、つまりマスター/スレーブ モードでのデータ バックアップをサポートしています。

Redis の利点:

  • 非常に高いパフォーマンス: Redis は 110,000 回/秒の速度で読み取り、81,000 回/秒の速度で書き込みます。

  • 豊富なデータ型: Redis は、バイナリの場合の文字列、リスト、ハッシュ、セット、および順序付きセットのデータ型操作をサポートします。

  • アトミック: Redis のすべての操作はアトミックです。つまり、操作は正常に実行されるか、まったく実行されないかのどちらかです。個々の操作はアトミックです。複数の操作は、MULTI 命令と EXEC 命令によってラップされたトランザクション、つまりアトミック性もサポートします。

  • 豊富な機能: Redis はパブリッシュ/サブスクライブ、通知、キーの有効期限などの機能もサポートしています。

Redis は他の Key-Value ストアとどう違うのですか?

Redis はより複雑なデータ構造を持ち、それらに対するアトミックな操作を提供します。これは他のデータベースとは異なる進化の過程です。 Redis のデータ型は基本的なデータ構造に基づいており、追加の抽象化を必要とせずにプログラマにとって透過的です。

Redis はメモリ内で実行されますが、ディスクに永続化できるため、データ量がハードウェア メモリを超えることはできないため、さまざまなデータ セットの高速読み取りおよび書き込みを実行するときにメモリのトレードオフが発生します。インメモリ データベースのもう 1 つの利点は、ディスク上の同じ複雑なデータ構造と比較して、メモリ内での操作が非常にシンプルであるため、Redis は内部の複雑性が高くても多くのことを実行できることです。また、ディスク形式の観点からは、ランダム アクセスを必要としないため、コンパクトで追加生成されます。

2. Redis のデータ型は何ですか?

Redis は、文字列 (文字列)、ハッシュ (ハッシュ)、リスト (リスト)、セット (セット)、および zsetsorted セット (順序付きセット) の 5 つのデータ型をサポートします。

実際のプロジェクトでよく使用されるのは文字列とハッシュです。中級および上級の Redis ユーザーの場合は、HyperLogLog、Geo、Pub/Sub のデータ構造も追加する必要があります。

BloomFilter、RedisSearch、Redis-ML などの Redis モジュールも触ったことがあると言うと、面接官の目が輝き始めます。

3. Redis を使用する利点は何ですか?

  • HashMap と同様、データがメモリに保存されるため高速です。HashMap の利点は、検索と操作の時間が O1 であることです。

  • 文字列、リスト、セット、Zset、ハッシュなどの豊富なデータ型をサポートします。

  • トランザクションをサポートし、操作はすべてアトミックです。いわゆるアトミック性とは、データに対するすべての変更が実行されるか、またはまったく実行されないことを意味します。

  • 豊富な機能、キャッシュ、メッセージング、キーによる有効期限の設定に使用でき、有効期限が切れると自動的に削除されます

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

  • Memcached のすべての値は単純な文字列であり、Redis はその代わりとして、より豊富なデータ クラスをサポートします。

  • Redis は Memcached よりもはるかに高速です

  • Redis はデータを永続化できます

5. Memcache と Redis の違いは何ですか?

  • Memecache はすべてのデータをメモリに保存します。停電後はデータがメモリ サイズを超えることはありません。 Redis は部分的にハードディスクに保存されるため、データの耐久性が保証されます。

  • データ サポートの種類 Memcache のデータ タイプのサポートは比較的単純です。 Redis には複雑なデータ型があります。

  • 使用される基礎となるモデルは、基礎となる実装方法とクライアントと通信するためのアプリケーション プロトコルが異なります。 一般的なシステムがシステム関数を呼び出すと、移動とリクエストに一定の時間が無駄になるため、Redis は独自の VM メカニズムを直接構築します。

6. Redis はシングルプロセスおよびシングルスレッドですか?

Redis は単一プロセスおよび単一スレッドです。Redis はキュー テクノロジーを使用して同時アクセスをシリアル アクセスに変換し、従来のデータベース シリアル制御のオーバーヘッドを排除します。

7. ストリング型スマートストレージの最大容量はどれくらいですか?

512M。

8. Redis の永続化メカニズムは何ですか?それぞれの長所と短所は何ですか?

Redis は、RDB メカニズムと AOF メカニズムという 2 つの永続化メカニズムを提供します。

RDB (Redis Database) 永続化方法: データセットのスナップショットを使用して半永続モードで Redis データベースのすべてのキーと値のペアを記録し、永続化後の特定の時点でデータを一時ファイルに書き込むことを指します。完了したら、これを使用します。一時ファイルは、最後に保存されたファイルを置き換えてデータを回復します。

アドバンテージ:

  • ファイル dump.rdb は 1 つだけあり、永続化に便利です。

  • 耐災害性が高く、ファイルを安全なディスクに保存できます。

  • パフォーマンスを最大化するには、子プロセスをフォークして書き込み操作を完了し、メインプロセスがコマンドの処理を継続できるようにして、IO を最大化します。永続化のために別のサブプロセスを使用すると、メインプロセスは IO 操作を実行しないため、Redis の高いパフォーマンスが保証されます。

  • データセットが大きい場合、起動効率は AOF よりも高くなります。

短所: データのセキュリティが低い。 RDB は一定の間隔で永続化されます。永続化中に Redis が失敗すると、データが失われます。したがって、この方法は、データ要件が厳密ではない場合に適しています。

AOF (追加専用ファイル) 永続化方式: すべてのコマンド ライン レコードが完全に永続的に保存され、Redis コマンド リクエスト プロトコルの形式で aof ファイルとして保存されることを意味します。

アドバンテージ:

  • データ セキュリティのために、AOF 永続性は appendfsync 属性で構成できます。常に存在する場合、各コマンド操作は AOF ファイルに記録されます。

  • 追加モードでファイルを書き込むことで、サーバーが途中でダウンした場合でも、redis-check-aof ツールを通じてデータの整合性の問題を解決できます。

  • AOF メカニズムの書き換えモード。 AOF ファイルが書き換えられる前に (ファイルが大きすぎる場合、コマンドはマージされて書き換えられます)、一部のコマンド (誤って操作されたフラッシュオールなど) を削除できます。

欠点:

  • AOF ファイルは RDB ファイルよりも大きく、復元に時間がかかります。

  • データセットが大きい場合、RDBよりも起動効率が低くなります。

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

  • マスターがメモリ スナップショットを書き込む場合、save コマンドによって rdbSave 関数がスケジュールされるため、スナップショットが比較的大きい場合、パフォーマンスへの影響が非常に大きくなります。サービスは断続的に停止されます。

  • データが重要な場合、スレーブは AOF バックアップ データを有効にし、ポリシーは 1 秒あたり 1 つのデータを同期するように設定されます。

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

  • 負荷の高いマスター データベースにスレーブを追加しないようにしてください。

  • マスター/スレーブ レプリケーションにはグラフ構造を使用しないでください。一方向リンク リスト構造、つまりマスターを使用する方が安定しています。