面接中にまだ redis を理解できない場合は、面接での 40 の質問 (パート 1) をご覧ください。

面接中にまだ redis を理解できない場合は、面接での 40 の質問 (パート 1) をご覧ください。

1.Redisとは何ですか?

Redis は完全にオープンソースで無料で、BSD プロトコルに準拠しており、高性能のキーと値のデータベースです。 Redis およびその他のキーと値のキャッシュ製品には、次の 3 つの特徴があります。

(1) Redis はデータの永続化をサポートしており、メモリ上のデータをディスクに保存し、再起動時に再度ロードして使用することができます。

(2) Redis は単純な Key-Value 型のデータをサポートするだけでなく、list、set、zset、hash などのデータ構造のストレージも提供します。

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

Redis の利点

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

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

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

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

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

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

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

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

回答: Redis は、文字列 (文字列)、ハッシュ (ハッシュ)、リスト (リスト)、セット (セット)、および zsetsorted セット (順序付きセット) の 5 つのデータ型をサポートします。実際のプロジェクトでより一般的に使用されるのは文字列とハッシュです。上級 Redis ユーザーの場合は、HyperLogLog、Geo、Pub/Sub のデータ構造も追加する必要があります。 BloomFilter、RedisSearch、Redis-ML などの Redis モジュールを触ったことがあると言うと、面接官の目が輝き始めます。

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

(1) HashMap と同様にデータがメモリに保存されるため高速です。HashMap の利点は、検索と操作の時間計算量が O1 であることです) (2) string、list、set、 Zset、ハッシュなど (3) トランザクションをサポートし、操作はすべてアトミックです。いわゆるアトミック性とは、データに対するすべての変更が実行されるか、またはまったく実行されないことを意味します (4) 豊富な機能: キャッシュ、メッセージの保存、キーによる有効期限の設定、有効期限が切れると自動的に削除されます

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

(1) Memcached の値はすべて単純な文字列であり、Redis はその代替として、より豊富なデータ型をサポートします (2) Redis は Memcached よりもはるかに高速です (3) Redis はデータを永続化できます

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

(1) 保存方法 Memecache はすべてのデータをメモリ上に保存しますが、停電後はハングアップしますので、メモリサイズを超えるデータは保存できません。 Redis は部分的にハードディスクに保存されるため、データの永続性が保証されます。 (2) サポートするデータ型 Memcache は比較的単純なデータ型をサポートします。 Redis には複雑なデータ型があります。 (3) 使用される基礎となるモデル、基礎となる実装方法、およびクライアントと通信するためのアプリケーション プロトコルが異なります。一般的なシステムがシステム関数を呼び出すと、移動とリクエストに一定の時間が無駄になるため、Redis は独自の VM メカニズムを直接構築します。

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

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

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

答え: 512M

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

Redis は 2 つの永続化メカニズムを提供します: RDB および AOF メカニズム: 1)、RDBRedis データベース) 永続化モード: Redis データベースのすべてのキーと値のペアを記録するためのデータ セット スナップショット (半永続モード) の使用を指します。時点 データは一時ファイルに書き込まれ、永続化が完了すると、この一時ファイルは最後に永続化されたファイルを置き換えてデータを回復するために使用されます。利点: (1) ファイル dump.rdb が 1 つだけなので、永続化に便利です。 (2) 耐災害性に優れ、ファイルを安全なディスクに保存できます。 (3) パフォーマンスを最大化するには、子プロセスをフォークして書き込み操作を完了し、メインプロセスがコマンドの処理を継続できるようにして、IO を最大化します。永続化のために別のサブプロセスを使用し、メインプロセスは IO 操作を実行しないため、redis の高いパフォーマンスが保証されます) (4) データセットが大きい場合、起動効率は AOF よりも高くなります。短所: データのセキュリティが低い。 RDB は一定の間隔で永続化されますが、永続化の間に redis に障害が発生するとデータ損失が発生します。 2) AOFAppend 専用ファイル) 永続化方法: すべてのコマンド ライン レコードが redis コマンド リクエスト プロトコルの形式で完全に永続的に保存され、aof ファイルとして保存されることを意味します。 。利点: (1) データ セキュリティ、aof 永続性は appendfsync 属性で設定でき、常に各コマンド操作が aof ファイルに記録されます。 (2) 追加モードでファイルを書き込む サーバーが途中でダウンした場合でも、redis-check-aof ツールを使用してデータの整合性の問題を解決できます。 (3) AOF 機構の書き換えモード。 AOF ファイルが書き換えられる前に (ファイルが大きすぎる場合、コマンドはマージされて書き換えられます)、一部のコマンド (誤ってフラッシュオールなど) を削除する可能性があります。 欠点: (1) AOF ファイルは RDB ファイルよりも大きく、回復速度が遅い。 (2) データセットが大きい場合、rdb に比べて起動効率が悪くなります。

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

(1) マスターはメモリ スナップショットを書き込まないことが最善です。マスターがメモリ スナップショットを書き込む場合、save コマンドは rdbSave 関数をスケジュールし、メイン スレッドの作業をブロックします。スナップショットが比較的大きい場合、パフォーマンスへの影響は非常に大きくなります。 (2) データが重要な場合は、スレーブで AOF バックアップ データを有効にし、ポリシーを 1 秒に 1 回同期するように設定する必要があります (3) マスター/スレーブ レプリケーションの速度と接続の安定性を考慮すると、マスターとスレーブが同じ LAN 上にあることが最適です (4) 大きな負荷がかかった状態でマスター ライブラリにスレーブを追加することは避けるようにしてください (5) マスター/スレーブ レプリケーションにグラフ構造を使用しないでください。一方向のリンク リスト構造、つまりマスター <- スレーブ 1<- スレーブ 2 <- スレーブ 3... この構造は便利です。 単一障害点の問題を解決し、マスターの置き換えを実現します。奴隷。マスターがハングアップした場合は、他のすべてを変更せずに、すぐに Slave1 をマスターとして有効にすることができます。

10. Redis の期限切れキーの削除戦略は何ですか?

(1) スケジュール削除:キーの有効期限を設定し、タイマー(タイマー)を作成し、キーの有効期限が来たら即座にキーの削除操作を実行させます。

(2) 遅延削除: キーの有効期限を無視し、キー空間からキーを取得するたびに、取得したキーの有効期限が切れているかどうかを確認し、有効期限が切れている場合はキーを削除し、有効期限が切れていない場合はキーを返却します。 。

(3) 定期的な削除: プログラムはデータベースを時々チェックし、データベース内の期限切れのキーを削除します。削除する期限切れのキーの数とチェックするデータベースの数はアルゴリズムによって決まります。

11. Redis リサイクル戦略 (排除戦略)?

volatile-lru: 有効期限が設定されたデータ セット (server.db[i].expires) から最も最近使用されていないデータを選択して削除します。 volatile-ttl: 有効期限が設定されたデータ セット (server.db[i].expires) を削除します。期限切れ) で期限切れになるデータを削除します。 volatile-random: 有効期限を設定したデータ セット (server.db[i].expires) から任意のデータを選択して、allkeys-lru: データ セット (server.db から) を削除します。 [i] .dict) 最も最近使用されていないデータを選択して allkeys-random を排除します: データ セット (server.db[i].dict) からランダムにデータを選択して no-enviction (エビクション) を排除します: データのエビクションを禁止します。ここでは 6 つのメカニズムに注意してください。volatile と allkey は、有効期限を設定してデータ セットのデータを削除するか、すべてのデータ セットからデータを削除するかを規定します。次の lru、ttl、random は 3 つの異なる削除戦略に加えて、no-enviction です。戦略は決してリサイクルされません。

ポリシー ルールを使用します。

(1) データがべき乗則分布を示している場合、つまり、アクセス頻度が高いデータとアクセス頻度が低いデータがある場合は、allkeys-lru を使用します。

(2) データが均等に分散されている場合、つまりすべてのデータ アクセス頻度が同じ場合は、allkeys-random を使用します。

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

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

13. Redis の同期メカニズムを理解していますか?

回答: Redis はマスター/スレーブ同期とスレーブ/スレーブ同期を使用できます。最初の同期中に、プライマリ ノードは bgsave を実行し、後続の変更操作をメモリ バッファに記録します。完了後、rdb ファイル全体がレプリカ ノードに同期されます。レプリカ ノードがデータを受け入れた後、rdb イメージがロードされます。記憶の中に。ロードが完了すると、その期間中に変更された操作記録を再生のためにレプリカ ノードに同期するようにマスター ノードに通知され、同期プロセスが完了します。

14. パイプラインの利点は何ですか? パイプラインを使用する理由は何ですか?

回答: パイプラインによって実行される命令間に因果関係がない場合、複数の IO ラウンドトリップの時間を 1 回に短縮できます。ストレス テストに redis-benchmark を使用すると、redis の QPS ピーク値に影響を与える重要な要素がパイプライン バッチ命令の数であることがわかります。

15. Redis クラスターを使用したことがありますか? クラスターの原理は何ですか?

(1) Redis Sentinal は高可用性を重視しており、マスターがダウンした場合、自動的にスレーブをマスターに昇格させてサービスを提供し続けます。

(2) スケーラビリティを重視した Redis Cluster 単一の Redis メモリが不足する場合、Cluster は共有ストレージとして使用されます。

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

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

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

回答:レディソン、ジェディス、レタスなど。公式にはレディソンが推奨されています。

18. ジェダイとレディソンの長所と短所は何ですか?

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

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

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

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

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

この記事は、ブログ投稿プラットフォーム OpenWrite によって公開されています。

SenseTime 創設者、Tang Xiaoou 氏が 55 歳で死去 2023 年、PHP は停滞 Wi-Fi 7 が完全に利用可能になる2024 年初頭にデビュー、Wi-Fi 6 の 5 倍高速 Hongmeng システムが独立しつつあり、多くの大学が「Hongmeng クラス」を設立 Zhihui Jun の新興企業が借り換え、金額は 6 億元を超え、事前評価額は 35 億元 Quark Browser PC 版が内部テストを開始 AI コード アシスタントは人気があり、プログラミング言語のランキングはすべてです できることは何もありません Mate 60 Pro の 5G モデムと無線周波数技術ははるかに先を行っています MariaDB が SkySQL を分割し、確立されました独立した企業として<​​/span> Xiaomi、Yu Chengdong 氏の Huawei からの「キールピボット」盗作声明に対応
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5587102/blog/10149561