ドライ!知っている必要がありますRedisのインタビューは次のようになります

どのようなサポートRedisのデータ型の種類?

  • 文字列:基本データ型、バイナリセーフな文字列、最大512M
  • リスト:順序に従って添加の順序を維持するために、文字列のリスト
  • SET:順不同の文字列は、重複する要素はありません
  • SETソート:ソートされた文字列のコレクション
  • ハッシュ:キー/値のペアという一種

Redisのは、1つのプロセスまたは単一スレッドですか?

Redisのは、シングルスレッド処理、Redisのキューイング技術は、従来のデータベースシリアル制御のオーバーヘッドをなくし、同時アクセスシリアルアクセスとなるであろうが。

なぜ、Redisのは、シングルスレッドのですか?

マルチスレッドはロックを含む、およびCPUを切り替えて消費マルチスレッド処理スレッドになるように設計します。RedisのCPUがボトルネックではないので、Redisのボトルネックは、マシンのメモリやネットワーク帯域幅である可能性が最も高いです。あなたは、シングルスレッドのマルチコアCPUのパフォーマンスを再生することはできませんが、単一のRedisのインスタンスを回すことによって解決することができます。

Redisの利点

  • **速いスピード。データはHashMapのと同様に、メモリに格納されているので**、HashMapの利点を見つけることであり、動作時間の複雑さはO(1)であります
  • 豊富なデータ型のサポート、サポート文字列、リスト、セット、ソートセット 、ハッシュ
  • サポートサービス、オペレーションは、すべての実行またはすべての実行されていないか、データへのいわゆるアトミック変更アトミックです
  • 豊富な機能を備えた:有効期限を設定するためのキーを押して、キャッシング、メッセージのために使用することができ、自動的に失効した後に削除されます

利点Redisのとmemcachedのは何ですか

  • memcachedのすべての値は、単純な文字列、その代替としてレイズしている豊富なデータ型をサポート
  • Redisのはmemcachedのよりもはるかに高速であります
  • Redisのは、自分のデータを永続化することができます
  • Redisのデータのバックアップデータのバックアップをサポートし、そのマスター/スレーブモード

Redisのキー有効期限と永久、それぞれ、どのように設定するには?

EXPIREそして、PERSISTコマンド。

Redisの主要な物理リソースを消費して何?

メモリ。

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

Redisのは、最速の読み取りを実現し、メモリに、非同期データをディスクに書き込むことにより、高速データを書き込みます。

そのため、高速でRedisのデータ永続化機能。あなたは、メモリ内のデータを入れていない場合は、ディスクI / O速度が真剣にRedisの性能に影響を与えます。

メモリ今日安くなって、Redisのは、ますます人気になるだろう。あなたが使用する最大メモリを設定した場合、データが記録されている数に達したメモリ制限の後に新しい値を挿入し続けることができません。

コンセプトRedisのハッシュスロットについての話?

クラスタの各ノードは、16384個のクラスタRedisのハッシュスロット、チャネル決定するモジュロ16384のCRC16チェックサムによって各キーに配置されるのRedisのにハッシュ一貫性を使用するが、ハッシュスロットの概念を導入していない、クラスタハッシュスロットの一部を担当します。

Redisのパイプラインでの使用は何ですか?

要求/応答サーバは、古いプロセス新しい要求が要求応答されていない場合でも実現することができます。これはあなたの返事を待たずに、サーバーに複数のコマンドを送信することができます、そして最終的に1つの段階で答えをお読みください。

これは、広く何十年もの間使用される技術である、パイプライン(パイプライン)です。例えば、多くのPOP3プロトコルが大幅にサーバープロセスからダウンロード新しいメッセージを加速し、この機能をサポートするために実装されています。

Redisの業務を理解するには?

トランザクションは、単一の分離操作である:すべてのコマンドが順次実行直列化された取引です。トランザクションの実行中に、コマンドが中断され、他のクライアントの要求に送信されません。

トランザクションはアトミック操作です:トランザクション内のコマンドは、すべての実行またはすべての実行されませんどちらか。

Redisのトランザクション関連のコマンドとの?

MULTIEXECDISCARDWATCH

Redisのメモリ回復メカニズム

Redisのメモリの回復は、2つの主要な側面に焦点を当てました:

  1. Redisの有効期限ポリシー:有効期限のキー値を削除します。
  2. Redisの除去戦略:メモリ使用量は、メモリのうちmaxmemoryトリガデータ上の制限に達しました

Redisの有効期限ポリシー

Redisの有効期限ポリシーは、通常、次の3つがあります。

  1. タイミング満了それぞれのはすぐに削除されます有効期限のタイマーを作成するためのキーの必要性の有効期限を設定します。この戦略は、すぐに明確な古いデータをすることができ、メモリは非常に友好的だった。しかし、それは、このようにキャッシュされた応答時間とスループットに影響を与え、古いデータの処分にCPUリソースを大量にかかります。

  2. 不活性の有効期限が切れクリアされている有効期限が切れ、キーにアクセスした場合にのみ、キーの期限が切れているかどうかを判断します。この戦略は、省エネCPUリソースを最大化することができますが、その後のメモリは非常に非友好的です。極端な場合には、期限切れのキーの多くは、再びアクセスすることがないので、それは多くのメモリをクリアされません。

  3. 期限切れの定期的な定期的な間隔で、スキャンが鍵を期限切れ辞書のキーの一定数の一定数のデータベース、および明確に期限が切れます。かつての戦略は、二つの間の妥協です。定義された各スキャン間隔で時間がかかるの走査タイミングを調整することにより、CPUとメモリのリソースが異なる状況での最適なバランスの効果を達成する可能性があります。

Redisのは、両方の使用、不活性の期限が切れ定期的に期限切れに 2種類の有効期限ポリシーを。

いくつかのデータ消失の戦略を持っているのRedis、

Redisのでは、ユーザが使用する最大メモリサイズを設定することを可能にするserver.maxmemory上昇Redisのメモリデータが一定のサイズにサイズを設定し、それらがポリシーからデータを実行する場合

  • LRU-揮発性:古いデータからは、選んで、最低使用の外に選択するように設定されています
  • TTL-揮発性:古いデータからは、外のデータの選択に焦点を期限切れに設定されています
  • ランダム揮発性:任意のデータセットから排除集中データの選択が期限切れ
  • LRU-AllKeys最低使用のうち、選択されたデータセットからのデータ:
  • ランダムAllKeys:集中化されたデータから任意のデータの選択のうち
  • noenviction:データのうち、禁止

永続モードRedisのサポートにはどのようなもの

RDBの永続性の原理は、ディスク上のタイミングRDBファイルにメモリダンプに記録されたデータをRedisのことです。データセットのメモリのスナップショットがディスクに書き込まれる指定された時間間隔の後、実際の動作は、子プロセスをfork一時ファイルに書き込まれたデータの最初のセット、成功裏に書き込み、その後、前のファイル、バイナリ圧縮されたストレージを交換です。

AOF(ファイルのみを追加)永続的な原理は、ファイルに追加書き込みにRedisの操作ログです。すべてのは、書き込みを削除するログの形式で、サーバーによって処理されたレコードは、クエリ操作が記録されているテキストが、あなたは、詳細な操作履歴を参照するためにファイルを開くことができ、記録されません。サーバの再起動がします場合は、元のデータを復元するために、これらのコマンドを再実行してください。AOFは、ファイルの最後に追加のプロトコルレイズ各書き込み操作を保存するためのコマンド。背景書き換え用AOFファイルにもRedisの、ボリュームはAOFファイルが大きすぎるないように。

Redisの永続的な方法の長所と短所の2種類の?

RDBの永続性

  • 長所:レプリケーションの全体量のためのRDBファイルコンパクト、小型、ネットワークの伝送速度は、; AOFよりもはるかに高速に回復します。もちろん、AOFと比較して、最も重要な利点の1 RDBは、パフォーマンス上の比較的小さな衝撃であります
  • デメリット:そのデータのスナップショットとの永続的なモードでの致命的な欠陥RDBファイル今日は避けられないが、リアルタイムの持続性を行うことができず、データがますます重要に判断し、データ損失の大多数は、多くの場合、受け入れられないので、AOFの永続性主流と呼ばれます。さらに、RDBは、特定のファイル形式の互換性が悪い満たしている必要があります。

永続AOFと永続RDBは、AOFの利点は、第二のレベルのサポートの永続性、良好な相溶性ことは、欠点が大きいファイルで、回復が遅く、高衝撃性能である対応します

どのような方法Redisの永続化戦略を選択するには?

永続化戦略を導入する前に、まずの価格性能比を支払うことにしているかどうかRDB AOF、永続的なオープン理解する必要があります。RDBの永続性のコントラストは、一方ではRedisのは、一方で、子プロセスがIOにも圧力をもたらすでしょうハードディスクにデータを書き込むために、フォーク操作を運ぶbdsaveと、メインプロセスがブロックされている。AOF永続的な、ハードドライブにデータを書き込む大幅に増加した周波数について(秒のeverysec戦略の下で)、IOより大きな圧力の設定は、追加の障害物のAOFファイルをもたらすことができます。また、RDB basave AOFと同様に、ファイル、IO圧力を書き換えて、問題がフォークますとき、子プロセスを遮断します。対照的に、より高いAOF書き込みデータにハードディスク周波数へ、そうメイン処理Redisのパフォーマンスへの影響はさらに大きくなります。

実際の生産環境では、状況に応じてデータの量は、データのセキュリティ要件、予算の制約などのアプリケーションは、そこに永続化戦略の多様になります。そのような永続性を使用していない、またはRDB AOF一種または使用しますRDBと同僚はその上AOFの永続性とを回しました。また、永続的なポリシーはまた、永続的な複製からプライマリバックアップデータとしての機能を有する、のRedisの観点から主と共に選択する必要があり、ホストとスレーブマスタとスレーブは、独立して永続化方式を選択することができます。

なぜRedisのパーティションはいますか?

ゾーニングは、Redisのは、より多くのメモリを管理することができ、Redisのは、マシンのすべてのメモリを使用することができます。何のパーティションが存在しない場合は、あなただけのマシンのメモリまで使用することができます。Redisの単純指数関数的に増加取得するコンピュータを追加することにより、コンピューティングパワーを分割、Redisのネットワークの帯域幅は、コンピュータやネットワークカードを増加し、倍増します。

Redisのクラスタマスターは、モデルからコピーする方法ですか?

クラスタに、通信ノード部分またはほとんどのノードの障害が発生した場合に、まだ利用可能でないクラスタがマスターモデルから複製され、各ノードは、N-1のコピーを有しています

Redisのクラスタは、それを失うことを書くのだろうか?なぜ?

Redisのは、一定の条件の下で動作しているとき、実際にクラスタが失われる可能性があることを意味し、強力なデータの一貫性を保証するものではありません。

クラスタRedisの間で複製される方法

非同期レプリケーション。

どのようにRedisのメモリの最適化を行います

可能な限り、ハッシュテーブルを使用します(ハッシュ)、ハッシュテーブル(保存された少数のリストを言うことです)に使用されるメモリは非常に小さいので、あなたは、このようなウェブシステムとしての内部ハッシュテーブルにデータモデルの抽象化、などでなければなりませんそこにユーザーオブジェクトがない別のキーを設定し、ユーザーの名、姓、電子メール、パスワード、に、であるが、ユーザーは、このすべての情報は、ハッシュテーブルに格納されて置いてください。

Redisの一般的な使用シナリオ

  • セッション共有(シングルサインオン)
  • ページキャッシング
  • キュー
  • ランク/電卓
  • パブリッシュ/サブスクライブ

建築はどのパターンがRedisの?その特性についての話?

スタンドアローン

特徴:シンプルな

問題:

  1. メモリ容量が限られています
  2. 限られた処理能力
  3. 可用性にできません。

マスタースレーブのレプリケーション

Redisのレプリケーション(複製)機能は、ユーザがRedisのサーバーに基づいて、サーバの任意の数のコピーを作成することができ、サーバは、(マスターは(マスター)にコピーされ、レプリカをコピーすることによって、サーバからサーバから作成された、請求スレーブ)。主に適切サーバ間のプライマリネットワーク接続から、マスターとスレーブサーバの両方が同じデータを持つことになり、メインサーバは、サーバから同じデータの主な保証されているサーバーからデータの更新を同期させるためにそれらに起こることがあります。

問題:

  1. 私たちは、可用性を保証することはできません
  2. マスターが圧力を書い解決しません

衛兵

Redisのは、分散システムは、Redisのマスターサーバーから監視し、自動的にプライマリサーバをオフラインにフェイルオーバーされるセンチネル。3つの機能:

  • モニタリング(監視):センチネルはプライマリサーバからは正常に機能している場合、サーバーをチェックしていきます。

  • (通知)を思い出させる:Redisのサーバーの問題を監視する場合、Sentinelは、APIを介して、管理者や他のアプリケーションに通知を送信することができます。

  • 自動フェイルオーバー(自動フェイルオーバー):プライマリサーバが正常に動作していないとき、Sentinelは自動的にフェイルオーバー操作を開始します。

特徴:

  1. 高可用性を確保
  2. 各ノードの監視
  3. 自動フェイルオーバー

短所:

  1. マスタースレーブモードは、切り替えは時間がかかり、データが失われます
  2. マスターが圧力を書い解決しません

クラスタ(プロキシタイプ)

Twemproxyは、オープンソースのTwitterのmemcacheとRedisの迅速/軽量のプロキシサーバであり、memcachedのASCIIプロトコルとRedisの契約をサポートTwemproxyは、高速シングルスレッドのプロキシプログラムです。

特徴:

  1. ハッシュアルゴリズムの種々:MD5、CRC16、CRC32、CRC32a、謝、雑音、ジェンキンス
  2. サポート障害が発生したノードは自動的に削除します
  3. 裏面透明ビジネスロジックスライスをシャーディング、読み取りおよび書き込み動作と同じ動作のRedisの片面

短所:

  1. それは、高可用性を維持する必要がある、新しいプロキシを追加しました。
  2. 自動転送の失敗が悪いスケーラビリティをサポートすることはできません自体のフェールオーバーロジックを実装する必要があり、スケーリングのための容量は、手動操作が必要

クラスタ(直下型)

次いで、3.0サポートRedisのクラスタのクラスタリングのRedis、Redisのクラスタフリー中央構造、データ記憶ノードとクラスタ全体の状態の各々は、すべてのノードと他のすべてのノードが接続されています。

特徴:

  1. (存在しないパフォーマンスのボトルネックノードに影響を与える)なしセンターアーキテクチャ、より少ないプロキシ層。
  2. 分散複数のノードを格納したデータ、ノード間のデータ共有、データの分布に応じてスロットを動的に調整することができます。
  3. スケーラビリティは1000のノードへ直線的に拡張可能な、ノードが動的に追加または削除されてもよいです。
  4. 高可用性は、いくつかのノードは、クラスタがまだ使用可能で、使用できません。スレーブを増やすことで、データのバックアップコピーを作成します
  5. マスターの役割を強化するために、投票メカニズムへのスレーブとの完全なゴシッププロトコル経由でノード交換ステータス情報、間の自動フェイルオーバーを実現するために失敗し、。

短所:

  1. リソースの分離状況は互いに影響しやすい、貧しい人々です。
  2. 非同期データレプリケーション、強力なデータの一貫性を保証するものではありません。

使用済みのRedisがそれにロックを分散し、それが実現する方法ですか?

その後、Setnx、ロックを取得するためのスクランブル、つかんで、有効期限は、ロックが解除忘れを防止期限切れにロックを追加します。あなたが突然クラッシュしたり、維持を再起動するsetnxプロセスの後に期限切れ前に実行した場合、どうなりますか?パラメータの非常に複雑な命令セットがありますが、これはsetnxと合成指示を使用すると同時に、有効期限が切れることができるはず!

非同期キューを何をするのRedis使用、どのように使うのですか?欠点は何ですか?

キューのような構造、rpush生産ニュース、LPOP消費者のニュースとしてリストを使用してください。適切な睡眠へのメッセージは、もう一度試していないだろうときLPOP。

短所:

  • 組立ラインオフ消費者の場合には、生産は、メッセージキューがそうでRabbitMQのようプロを使用する必要がありますと、メッセージが失われます。
  • 多くの場合、消費者はそれを生成することはできませんか?
  • Nメッセージキュー:パブ/サブトピックサブスクライバモードを使用して、あなたは1を達成することができます。

キャッシュの貫通とは何ですか?避けるためにどのように?

キャッシュの浸透

一般的なキャッシュシステムは、対応する値が存在しない場合、彼らは、(DBなど)のバックエンドシステムを見つけるために行く必要があり、キャッシュクエリにキーによるものです。いくつかの故意の悪質なリクエストクエリのキーが存在しない、要求の大規模な量は、それがバックエンドシステムに多くの圧力の原因となります。これは、キャッシングの浸透と呼ばれています。

避けるためにどのように?

  1. クエリ結果は空の状況、キャッシュ、キャッシュ時間が短い、またはキャッシュは、挿入した後、クリーンアップに対応する鍵データです。

  2. キーは、特定のフィルタのために存在していません。私たちは、ビットマップフィルタクエリによって大きなビットマップにすべての可能なキーを置くことができます。

キャッシュ雪崩とは何ですか?Ruは避けますか?

雪崩キャッシュキャッシュサーバのリブートまたは1つの期間に集中キャッシュの多くは失敗し、失敗し、バックエンドシステムがクラッシュするシステムを引き起こし、多くの圧力をもたらすことになります。

避けるためにどのように?

  1. キャッシュミスした後、スレッドやキュー・データベースの数を制御するためにロックすることにより、書き込みキャッシュをお読みください。例えば、1つのスレッドのみのデータと書き込みキャッシュを照会することを可能にするためのキー、他のスレッドが待機します。
  2. A1は、A2、A1キャッシュの有効期限が設定されている短期へのアクセスに失敗した場合、二次キャッシュを行い、元のA1をキャッシュし、A2のコピーが、キャッシュされ、A2が長期3に設定されている:異なるキー、キャッシュの無効化のための別の有効期限時間を設定するにはできるだけ均一な時点

キャッシュの同時実行

ここでの並行は、複数の同時Redisのキー原因を設定すると同時に、クライアントの問題を指します。実際には、自身のRedisシングルスレッド操作です、複数のクライアントの同時操作は、最初に来るの原則に基づいて、最初の最初の障害物の残りの部分の最初の実行を来、行いました。もちろん、別の解決策は、それをシリアル化キューの動作をredis.setすることで、それは一つ一つを実行する必要があります。

キャッシュ・ウォーミング

キャッシュラインを予熱するシステムになった後、関連データを直接キャッシュバッファシステムにロードされます。

これは、時にユーザーの要求、最初のクエリのデータベース、および、データキャッシュの問題を回避することができます!直接キャッシュデータを照会するユーザーが以前に予熱し!

ソリューション:

  1. 直接書き込みキャッシュがページを更新するには、次回のオンラインマニュアル;
  2. プロジェクトが始まったときにデータの量を自動的にロードすることができます。

オブジェクトがオンラインシステムである前に、データがキャッシュにロードされます。

どのようにRedisの回復プロセスの仕事?

  1. クライアントは、データの書き込み動作を行い、
  2. Redisのサーバーが書き込み動作を受け取った後、リミットチェックmaxmemoryは、制限を超えている場合は、対応するポリシーに応じて部分データを一掃します
  3. 書き込み操作が完了しました。

Redisのは、マルチコアCPUの使用率を改善する方法を、シングルスレッドのですか?

あなたはRedisの同じサーバーの複数のインスタンスに配備され、あなたが複数のCPUを使用したい場合は、あなたが考えることができるように、サーバーが十分ではありませんどのような場合には、いくつかの点で、使用するなど、さまざまなサーバにそれらを扱うことができますフラグメント(断片)。

設定はRedisの即効性にそれを再起動しません修正しますか?

インスタンスを実行するために、多くの構成オプションは、実行再開のいずれかの形式なしに、CONFIG SETコマンドで変更することができますがあります。Redisの2.2以降では、Redisのを再起動することなく、それ以外の場合はAOF RDBの永続性からスナップショットに切り替えたりすることができます。検索CONFIG GET *詳細については、コマンド。しかし、時折再起動し、このような新しいバージョンにアップグレードするにはRedisのプログラムとして、必要とされる、またはあなたが時間の設定パラメータを変更する必要がある場合、現在いくつかのCONFIGコマンドでサポートされていません。

Redisのメモリは何が起こるかなくなりましたか?

あなたが設定した上限に達した場合は、Redisの書き込みコマンドは、エラーメッセージを返します(ただし、コマンドでも正常に戻ることができますお読みください。)それともできRedisのは、メモリの制限に達したときに、コンフィギュレーション・除去メカニズムを使用するためにキャッシュとしてRedisのは、古い内容を洗い流すことがあります。

Redisのは、再実行を行うには早いか遅いスケールアップ分配されますか。なぜ?

Redisのは(単一インスタンスのみ1Mメモリ)ので、軽量であることから、将来の拡張を防ぐために、最善の方法は、複数のインスタンスを起動するために開始することです。もしサーバが1つしかない場合でも、あなたはまた、Redisのは、パーティショニングを使用して、分散方式で実行されている初期の段階、同じサーバー上で複数のインスタンスを起動することができます。いくつかのRedisのインスタンスよりも当初は、そのような32や64の例として、ほとんどのユーザーのために、動作するように面倒なことができますが、この犠牲を行うことを設定すると、長期的にはそれだけの価値があります。あなたのデータをよりRedisのサーバーを必要とし、成長している。この場合では、あなたは何をする必要がある(再ゾーニングの問題に関係なく)だけあるサーバーから別のサーバーに簡単にRedisのインスタンス移行です。あなたが別のサーバーを追加すると、あなたは、第二のマシンに最初のマシンから半あなたのRedisのインスタンスの移行が必要になります。

Redisのと他のキーと値のストアの違いは何ですか?

Redisのは、より複雑なデータ構造を有しており、他のデータベースの進化経路とは異なるそれらにアトミック操作を提供します。一方、Redisのデータ型は、追加の抽象化を必要とせずに、プログラマに対して透過的、基本的なデータ構造に基づいています。Redisのメモリで実行されているが、高速の読み取りとメモリのトレードオフの異なるデータセットを書き込む場合、データがハードウェアメモリの量よりも大きくないように、ディスクに保存することができます。あなたが内部のRedis非常に複雑な問題の多くを行うことができますので、インメモリ・データベースのもう一つの利点は、同じ複雑なデータ構造に比べて、ディスク上の非常に簡単なメモリで動作します。彼らはランダムアクセスを必要としないので、一方、そのコンパクトディスクフォーマットの面で、追加の方法を生成します。

より多くの共有に注意


良いテキストをお勧めします:

ます。https://juejin.im/post/5d04528ef265da1b8b2b5bbdで再現

おすすめ

転載: blog.csdn.net/weixin_34143774/article/details/93164508