1.Redisとは何ですか? 特徴は何ですか?
回答: Redis は、C 言語で記述された複数のデータ構造をサポートするオープンソースの高性能 NoSQL データベースです。
- 文字列、ハッシュ テーブル、リスト、セット、ソートされたセットなどの複数のデータ構造をサポートします。
- データはメモリに保存され、迅速に読み書きできます。
- データの永続化をサポートし、データをディスクに保存できます。
- パブリッシュ・サブスクライブ、トランザクション、Luaスクリプトなどの豊富な機能を提供します。
- 可用性が高く、スケーラブルです。
2. Redis の一般的なデータ構造は何ですか? 適切なアプリケーションシナリオは?
回答: Redis は、文字列 (string) 型、ハッシュ (hash) 型、リスト (list) 型、セット (set) 型、および順序付きセット (sorted set または zset) 型の 5 つのデータ型をサポートします。
- 文字列: カウンタ、キャッシュ、セッション ID などの単純な値の保存に適しています。
- ハッシュ: ユーザー情報、記事情報などのオブジェクトの保存に適しています。
- リスト: キュー、チャット記録などの保存に適しています。
- コレクション: タグや友達リストなどの保存に適しています。
- 順序付けされたコレクション: スコアによって並べ替える必要があるリーダーボードやその他のデータの保存に適しています。
3. Redis のマスター/スレーブ レプリケーションはどのように実装されますか?
回答: Redis のマスター/スレーブ レプリケーションは、スレーブ サーバー上で Redis プロセスを開始し、マスター サーバーに接続して SYNC コマンドを送信することによって実現されます。
マスターサーバーはスナップショットファイルを作成し、それをスレーブサーバーに送信します。次に、マスターはすべての書き込み操作をスレーブに複製します。レプリケーション プロセス中、スレーブ サーバーはマスター サーバーに接続してコマンドを受信するため、データは失われません。
4. Redis はどのようにして永続性を実現しますか? それぞれの長所と短所は何ですか?
回答: Redis に快照
は と の2 つの永続化メソッドがあります日志文件
。スナップショットとは、現在のメモリ内のデータをコピーとしてハードディスク上のファイルに保存することです。ログ ファイルは、書き込み操作をログ ファイルに書き込みます。Redis が再起動すると、ログ ファイルからデータが読み取られて再構築されます。
- RDB 永続ファイルは小さく、回復速度は速いですが、データが失われる可能性があります。
- AOF 永続ファイルはサイズが大きく復元に時間がかかりますが、すべての書き込み操作が記録されるため信頼性が高くなります。
5. Redis の同時実行制御はどのように実装されていますか?
回答: Redis はシングルスレッド モデルを使用しており、各クライアント リクエストは順番に処理されるため、同時実行の安全性が確保されています。さらに、Redis は非同期 I/O およびノンブロッキング I/O 技術を使用してパフォーマンスを向上させます。
6. Redis のキャッシュ削除戦略は何ですか?
回答: Redis には 4 つのキャッシュ削除戦略があります。
- LRU (最近使用されていないもの)
- LFU (最も一般的に使用されない)
- TTL (生存時間)
- ランダム
- これらのポリシーは、構成ファイルを変更するか、キーの有効期限を設定することによって使用できます。
7. Redis トランザクションはどのように実装されますか?
回答: Redis はMULTI
、EXEC
およびWATCH
コマンドを使用してトランザクションを実装します。MULTI
このコマンドはクライアントのリクエストをキューにプッシュし、EXEC
キュー内のすべてのコマンドを実行します。WATCH
このコマンドは 1 つ以上のキーの変更を監視できます。キュー内のトランザクションの実行中に監視対象のキーが他のクライアントによって変更された場合、トランザクションはキャンセルされます。
root@1b9968da8463:/data# redis-cli
127.0.0.1:6379> set name 'Peter'
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set id '001'
QUEUED
127.0.0.1:6379> get id
QUEUED
127.0.0.1:6379> set depName 'Dev'
QUEUED
127.0.0.1:6379> set age 25
QUEUED
127.0.0.1:6379> exec
1) OK
2) "001"
3) OK
4) OK
127.0.0.1:6379> get age
"25"
8. Redis Sentinel とは何ですか? それは何をするためのものか?
回答: Redis Sentinel は、Redis サーバーの健全性状態を監視し、マスター サーバーがダウンしたときにスレーブ サーバーをマスター サーバーに自動的にアップグレードできる独立したプロセスです。
9. Redis の一般的な使用シナリオは何ですか?
回答: Redis の一般的な使用シナリオには、キャッシュ、メッセージ キュー、カウンター、リーダーボード、分散ロックなどが含まれます。
10. Redis は分散ロックをどのように実装しますか?
回答: Redis はSETNX
コマンドを通じて分散ロックを実装します。ロックを取得する前に、現在のロックが他のクライアントによって既に占有されているかどうかを確認する必要があります。占有されていない場合はロックを取得し、占有されていない場合は一定時間待ってから再試行します。 。
11. Redis の期限切れキーの削除戦略は何ですか? 期限切れのキーはどのように処理されますか?
回答: Redis は、期限切れのキーを処理するために、遅延削除と定期的な削除という 2 つの戦略を使用します。
-
遅延削除: クライアントが期限切れのキーにアクセスしようとすると、Redis はただちにキーを削除し、null 値を返します。このアプローチでは、アクセス時に確実に削除されますが、一部のキーが期限切れ後もしばらく存続する可能性があります。
-
定期的な削除: Redis は、期限切れのキーを時々チェックして削除します (デフォルトでは 1 秒)。このメソッドは、期限切れのキーをいくつか調べ、条件を満たすキーを削除してメモリを解放します。定期的に削除すると、期限切れのキーの蓄積によって引き起こされるメモリ負荷を防ぐことができます。
12. Redis の同時競合問題を解決するにはどうすればよいですか?
回答: Redis はシングルプロセスシングルスレッドモデルを採用しており、マルチスレッドの競合の問題はありません。
同時に、Redis はイベント駆動型モデルを使用して、epoll などのテクノロジーによる高い同時実行性をサポートし、数千の同時接続を処理できます。データの一貫性を確保するために、Redis はアトミックな操作とトランザクションのサポートを提供しており、これにより競合の問題を回避できます。
13. Redis クラスターにはスロットがいくつありますか?
A: Redis クラスターにはデフォルトで 16384 個のスロットがあります。
ノードにスロットがない場合、各ノードは対応するキーを適切に処理するために全範囲のスロットを持っている必要があるため、ノードは正しく動作しません。したがって、ノードにスロットがない場合は、ノードを再起動してスロットを再割り当てし、ノードが正しく動作することを確認する必要があります。
14. Redis データが書き込まれるときに、各ノード スロットにデータをどのように割り当てますか?
回答: Redis は一貫したハッシュ アルゴリズムを使用して、データをさまざまなノードに分散します。
具体的には、Redis は仮想リング ハッシュ スペースを使用してすべてのノードを表します。各ノードは、この空間内の 1 つ以上のスロットにマッピングされます。
Redis クラスターでは、これらのスロットは各ノードに動的に割り当てられます。各スロットはデータの一部を表し、Redis はキーに従ってデータを対応するスロットにハッシュし、スロットに対応するノードにデータを保存します。
Redis にデータを書き込むと、Redis はキーのハッシュ値に基づいて対応するスロットを見つけ、対応するノードにデータを書き込みます。これにより、データの高可用性とスケーラビリティが確保されます。
15. Redis クラスターのスロットと合計スロットの関係は何ですか?
Redis クラスターはデータセット全体を 16384 個のスロットに分割し、各スロットにキーと値のペアを保存できます。クラスター内の各ノードは複数のスロットを担当できますが、各スロットは 1 つのノードによってのみ処理されます。すべてのノードが担当するスロット数の合計は 16384 に等しくなければなりません。