20の古典的なRedisインタビューの質問への回答を読み終えた後、私は突然気づきました!

1. Redisとは何ですか?

ここに画像の説明を挿入

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

  • Redisおよびその他のキー値キャッシング製品には、次の3つの特性があります。

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

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

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

Redisの利点

  • 非常に高いパフォーマンス-Redisは110,000回/秒の読み取りと81,000回/秒の書き込みが可能です。

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

  • アトミック-すべてのRedis操作はアトミックです。つまり、正常に実行されるか、まったく実行されません。単一の操作はアトミックです。複数の操作は、MULTIおよびEXEC命令によってパッケージ化されたトランザクション、つまりアトミック性もサポートします。

  • 豊富な機能-Redisは、公開/サブスクライブ、通知、キーの有効期限、およびその他の機能もサポートしています。

Redisは他のキーバリューストアとどう違うのですか?

  • 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はMemcached3よりも高速です。Redisはデータを永続化できます

  • インタビューに関するその他の質問については、WeChatパブリックアカウントをフォローしてください:Java2B

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

  • 保存方法Memecacheはすべてのデータをメモリに保存し、電源障害後にハングします。データはメモリサイズを超えることはできません。Redisの一部はハードディスクに保存され、データの耐久性を確保できます

  • データサポートタイプMemcacheは、比較的単純なデータタイプをサポートします。Redisには複雑なデータタイプがあります。

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

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

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

7.文字列タイプの値の最大ストレージ容量はいくつですか?

回答:512M

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

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

RDBRedisデータベース)永続モード:データセットスナップショットを使用する半永続モードを指します)redisデータベースのすべてのキーと値のペアを記録し、特定の時点でデータを一時ファイルに書き込みます。永続モードの終了後、この一時を使用しますこのファイルは、データの回復を実現するために最後の永続ファイルを置き換えます。

利点:

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

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

  • パフォーマンスを最大化するには、子プロセスをフォークして書き込み操作を完了し、メインプロセスにコマンドの処理を続行させて、IOを最大化します。永続性のために別のサブプロセスを使用します。メインプロセスはIO操作を実行せず、redisの高いパフォーマンスを保証します)4。大きなデータセットと比較して、起動効率はAOFよりも高くなります。

短所:

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

AOFAppendのみのファイル)永続モード:すべてのコマンドラインレコードが完全に永続的にredisコマンド要求プロトコルの形式で保存され、aofファイルとして保存されることを意味します。

利点:

  • データセキュリティ、aof永続性は、appendfsync属性を使用して構成できます。常に、すべてのコマンド操作がaofファイルに1回記録されます。

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

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

短所:

  • AOFファイルはRDBファイルよりも大きく、回復速度が遅い。

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

9.一般的なパフォーマンスの問題と解決策を再確認します。

  • マスターはメモリスナップショットを書き込まない方が良いです。マスターがメモリスナップショットを書き込む場合、saveコマンドはrdbSave関数をスケジュールします。これにより、メインスレッドの作業がブロックされます。スナップショットが大きい場合、パフォーマンスへの影響が非常に大きくなり、サービスが断続的に中断されます。

  • データがより重要な場合、特定のスレーブはAOFがデータをバックアップできるようにし、ポリシーは毎秒同期するように設定されます

  • マスタースレーブレプリケーションの速度と接続の安定性のために、マスターとスレーブは同じLAN内にあることが望ましいです

  • ストレスのたまったマスターライブラリにスレーブを追加しないようにしてください

  • マスタースレーブの複製にグラフ構造を使用しないでください。単一にリンクされたリスト構造を使用する方が安定しています。つまり、マスター<-スレーブ1

<-Slave2 <-Slave3 ...この構造は、単一の障害点の問題を解決し、スレーブからマスターへの置き換えを実現するのに便利です。マスターが電話を切った場合、すぐにマスターとしてSlave1を起動でき、他は変更されません。

10. redisの期限切れのキーを削除するにはどうすればよいですか?

  • 時限削除:キーの有効期限を設定しながら、タイマータイマーを作成します。キーの有効期限が来るとすぐに、タイマーにキーの削除操作を実行させます。

  • 遅延削除:キーを期限切れにしますが、キースペースからキーを取得するたびに、取得したキーが期限切れかどうかを確認し、期限切れの場合はキーを削除し、期限切れでない場合はキーを返します。

  • 定期的な削除:プログラムは定期的にデータベースをチェックし、期限切れのキーを削除します。削除する期限切れのキーの数とチェックするデータベースの数については、アルゴリズム次第です。

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

  • Volatile-lru:有効期限が設定されているデータセット(server.db [i] .expires)から最も使用頻度の低いデータを選択します

  • volatile-ttl:有効期限が設定されているデータセット(server.db [i] .expires)から有効期限が切れるデータを選択します

  • 揮発性ランダム:有効期限が設定されているデータセット(server.db [i] .expires)から削除するデータを任意に選択します

  • allkeys-lru:データセット(server.db [i] .dict)から最も使用頻度の低いデータを選択して削除します

  • allkeys-random:データセット(server.db [i] .dict)から任意にデータを選択して削除します

  • 非環境(排除):データの排除を禁止する

ここで6つのメカニズムに注意してください。揮発性およびallkeysは、有効期限が設定されたデータセットからデータを削除するか、すべてのデータセットからデータを削除するかを指定します。次のlru、ttl、およびrandomは、3つの異なる削除戦略と1つです。決してリサイクルしないという環境のない戦略。

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

  • データが電力法則の分布を示している場合、つまり、データの一部へのアクセス頻度が高く、データの一部へのアクセス頻度が低い場合は、allkeys-lruを使用します。

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

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

回答:最速の読み取りおよび書き込み速度を実現するために、Redisはデータをメモリに読み取り、データをディスクに非同期で書き込みます。したがって、redisには高速でデータの永続性という特徴があります。データをメモリに入れないと、ディスクのI / O速度がredisのパフォーマンスに深刻な影響を及ぼします。今日、メモリが安くなると、redisはますます人気が出てきます。最大メモリ使用量が設定されている場合、既存のデータレコードの数がメモリ制限に達した後、新しい値を挿入することはできません。

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

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

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

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

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

Redis Sentinalは高可用性に重点を置いており、マスターがダウンすると、スレーブをマスターに自動的に昇格させ、サービスを提供し続けます。
Redis Clusterはスケーラビリティに重点を置いています。単一のRedisメモリが不十分な場合、Clusterはシャードストレージに使用されます。
16. Redisクラスターソリューションによってクラスター全体が使用できなくなるのはどのような状況ですか?

回答:3つのノードA、B、およびCを持つクラスター。レプリケーションモデルがない場合、ノードBに障害が発生すると、クラスター全体が5501〜11000の範囲のスロットがなく、使用できないと見なします。

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

回答:Redisson、Jedis、lettuceなど、Redissonが正式に推奨されています。

18. JedisとRedissonの長所と短所は何ですか?

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

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

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

20.Redisハッシュスロットの概念について教えてください。

回答:Redisクラスターは一貫性のあるハッシュを使用しませんが、ハッシュスロットの概念を導入します。Redisクラスターには16384個のハッシュスロットがあります。CRC16チェックの後、各キーは16384を変調して、配置するスロットを決定します。各ノードは、ハッシュスロットの一部を担当します。

総括する

インターネットの急速な発展に伴い、従来のリレーショナルデータベースは、大規模なデータ量と高い同時実行性を処理する場合に不十分になり、多くの克服できない問題が発生しますが、非リレーショナルデータベースは、その特性のために非常に困難になります。急速な発展。Redisデータベースは、大規模なデータと高い同時アクセスを解決するために作成されています。
最近、仕事を見つけるのに最適な時期です。2020年のRedisまたはマイクロサービス関連の質問、および主要ベンダーの実際のインタビューの質問をもっと知りたい場合は、ここをクリックして情報、コードを入手できます。qf
以下は情報の一部です。スクリーンショット(すべての情報は、ドキュメント、pdf圧縮、およびパッケージ化処理に統合されています)。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/w1103576/article/details/108797035