[ターン] Redisの顔の質問

1、コピー処理からのRedisについての主な話

いくつかのキーがあります:
マスターノードは、スレーブノードは、主に水平方向の拡張のために責任が使用されているノードからの読み取り、書き込みを担当して、我々は読んでないと書き込み分離、スレーブノードの拡張は、スループット読む向上させることができます。
あなたはオフにした場合のダウンタイムのマスタデータが空の場合、その場合には、マスターの永続性は多分、その後、再起動可能性があるため、マスターノードは、データのスレーブノードのホットスタンバイ・マスター・ノードとして使用することは推奨しません、永続オンにする必要がありますコピー後、スレーブノードのデータも失われます。
それはマスターノードにPSYNCコマンドを送信するときには、スレーブノードを起動すると。
スレーブノードが最初にマスタノードに接続され、これは、完全な再同期フルボリュームコピーをトリガします。この時、マスターは、クライアントのクライアントは、すべての新しい書き込みコマンドがメモリ内キャッシュから受信しながら、RDBは、スナップショットファイルを生成を開始するためにバックグラウンドスレッドを開始します。
HTTPは、メカニズムによって相殺されます。
マスタノードの再起動またはデータが変更された場合、スレーブノードは、異なる実行IDに応じて区別されるべきです。
詳細を参照してくださいます。https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-master-slave.md


2、Redisのは、再開からの複製の主なメカニズムは何ですか?
バックログ、オフセット


図3に示すように、マスタノードは、マスタノードIPに応じてそれを配置することですか?
交換用のマスターノードが検索またはIPアドレスを交換することができない場合ので、マスタ実行IDに基づいて配置されていません

4、ノードはキーそれを期限切れになりますか?
いいえ、マスターノードは、キーのうち、LRUを通過した後、スレーブノードにdelコマンドをシミュレートしますします。

5、高可用性クラスタRedisのセンチネルの切り替え機構を説明
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-sentinel.md

6、データクラスタセンチネル損失の問題の解決策どのようなもの
に提供
分・ツー・ライト-奴隷。1
分-MAX-LAG-奴隷10の
意味が少なくとも1つのスレーブ、データレプリケーションの遅延が10秒を超えてはなりません。これは、非同期レプリケーションへのデータの損失を減らすだけでなく、データ損失のスプリットブレインを減らすことができます

7、どのようにセンチネルクラスタ自動検出メカニズム
パブ/サブ実施を通じて、同時に__ __sentinelする方法:こんにちは、このメッセージを送信するチャネルが、他の消費者センティネルのニュース、他のセンチネルの存在の認識を。
2秒毎に一度送られ、そのホスト、IPの内容は、同じようRUNID。

8、話slave->マスター選出アルゴリズム
マスターがセンチネルスタンバイスイッチングのほとんどを許可、odown宣告された場合、それは、スレーブを選出次のことを考慮する必要があります:
1、切断マスターの長さ;
2、スレーブ優先順位
3より多くの位置は、重複、より優先度のコピーオフセット
選挙は出てこない場合は、私たちが最も小さいRUNIDを選んだ上記のすべての4を、

9.何が永続的な双方向のRedisの?

RDB:永続データのための実行サイクル
AOF:ログ、追加のみのモードに書き込まれた各コマンドは、すべてのデータセットが再起動し、バックログAOFを再生することによって構築

10は、どのような長所と短所のRDBの持続性をRedisの?
RDBデータファイル(サブ処理期間)複数の、コールドスタンバイのために非常に適しています。
Redisのは、ちょうど存続するために、子プロセスのディスクIOをforkするので、非常に少ないのRedisのための外部サービスの提供のパフォーマンスに影響を与える
より速くAOF再起動よりも、より高速なデータ復旧
欠点があるため必要RDBのデータAOFの損失が少ないので、存在しないことです5分またはマスターに障害が発生し、それが簡単にデータを失うために一度長く持続。

11、Redisの場合は、高可用性と高い並列性を確保するには?
このトピックでは、比較的大きいです。私はいくつかに言うことができます。参考
https://blog.csdn.net/zero__007/article/details/86564520

12、どのように二重のRedisのデータベースと書き込み一貫性を確保するには?
主なポイントは、パターン別として、更新テストデータキャッシュにデータベースを書いて最初で、その後、キャッシュを削除します

13、データ型が何であるかRedisの?どちらがより適切な場面で使用されていますか?
あまりにも基本的な、ジュニア開発者に加えて、めったにお願い致します
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-data-types.md

14、Redisのデータの有効期限ポリシーは何ですか?メモリのどのようなメカニズム出ていますか?
有効期限ポリシーは、定期的に期限切れになったかどうかを確認されていない、メモリが不足しています。
メモリ除去メカニズム:
noeviction:メモリが書き込まれ、新たなデータを収容するのに十分でない場合は、新しい書き込み操作は、それが嫌れた、これはそれで誰もが一般的ではないと文句を言うだろう。
allkeys-LRU:新しいデータを収容するのに十分なメモリが鍵空間で書かれている場合は、キーが(これが最も一般的です)最近使用少なくとも除去されます。
allkeysランダム:メモリは、新しいデータを収容するのに十分ではない、ランダムにキーを削除キースペースで書かれているランダム、キーは確かに最近最もああ殺すために使用されなければならない理由は、これは、人々がそれを使用する一般的ではありません。
揮発性LRU:十分なメモリがキー空間に書き込まれた新しいデータを収容するために、有効期限が設けられているキーは、最低使用頻度(これは一般的に適切ではない)を除去します。
揮発性ランダム:新しいデータを収容するのに十分なメモリが鍵空間で書かれているときは、有効期限に提供され、ランダムなキーを削除します。
揮発性-TTL:メモリが新しいデータを保持するには不十分である鍵空間で書かれている有効期限を提供され、キーの有効期限は、以前の優先順位が削除されています。

15、Redisのは、どのように解決への同時競争書き込む
達成するために、そのようなノードの飼育係として、サードパーティ分散ロックと、1
つまり最初時計、マルチセット、EXECトランザクション実装である、独自の楽観的ロックのRedisと(トランザクション)を達成するために、2。
擬似コード:

コードをコピー
WATCHにmykey 
ヴァル= GETにmykey 
ヴァル=ヴァル+ 1 
MULTI 
SETにmykey $ valの
EXEC
コードをコピー

 


3、特定のアルゴリズムのための赤ロックhttp://www.redis.cn/topics/distlock.htmlを参照して、Redissonクライアントと達成するための主な方法:

コードをコピー
パブリッククラスDistributedRedisLock { 
プライベート静的Redisson redisson = RedissonManager.getRedisson()。
プライベート静的最後の文字列LOCK_TITLE =「redisLock_」。

パブリック静的ボイド取得(文字列ロック名){ 
文字列キー= LOCK_TITLE +ロック名。
RLOCK mylock = redisson.getLock(キー)。
mylock.lock(2、TimeUnit.MINUTES)。//ロックの提供带タイムアウト参数、タイムアウト结束强制解锁、防止死锁
System.err.println( "====== ======ロック" +にThread.currentThread()のgetName()); 
} 

パブリック静的ボイド放出(文字列ロック名){ 
文字列キー= LOCK_TITLE +ロック名。
RLOCK mylock = redisson.getLock(キー)。
mylock.unlock(); 
System.err.println( "======ロック解除======" +にThread.currentThread()のgetName()。)。
} 
}
コードをコピー

 

16、キャッシュ雪崩を解決する方法と浸透
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md

17、話のRedisクラスターの可用性とスタンバイスイッチング原則
原則Redisのクラスタはセンチネルとほぼ同様、非常に入手可能です。

審判のノードがダウンした
ノードがpfail、主観的なダウンタイムであること、その後、別のノードがダウンしたとみなします。複数のノードが考慮されている場合は、別のノードがダウンし、そのほぼ同じ原理センチネル、SDOWN、odownで、客観的ダウンタイムを失敗しています。

ノードは、ピンポンを戻っていないクラスタノードタイムアウトでは、それはpfail考えられます。

ノードは、ノードpfailを考慮した場合、ノードの半分以上がpfailとみなされた場合、そのメッセージは、それは失敗となり、他のノードへのpingは、pingをゴシップます。

ノードから濾過
マスターノードを選択するためのスイッチは、すべてのスレーブノードから、ダウンタイムのマスターノード。

それはクラスタノードタイムアウトを超えた場合に、各スレーブノードチェック時間と切断マスターノードは、*クラスタスレーブ妥当性因子は、マスタに切り替えない資格がありません。

ノード選出から
各スレーブノードは、マスター上のすべてのデータを自分のコピーを相殺するために選挙の時間を設定するために、ノードからのより大きな(よりデータコピー)、より多くの時間選挙フロント、優先選挙オフセットによる。

すべてのマスターノード開始スレーブ世論調査では、マスターノードのほとんど(N + 1/2)が、その後の選挙を通じて、それはマスターにノードから切り替えることができ、いずれかのノードのために投票した場合、投票に選挙を行うことをスレーブに。

ノードから切り替え、マスターノードからスイッチングノードを行います。

センチネル比較
センチネルと全体のプロセスに比べては、なるように、複製およびセンチネル機能の強力な、直接統合のクラスタをRedisの、非常によく似ています。

分散アルゴリズムRedisのトークに対処するための18、
最初nginxのは、4つの主要なアルゴリズム、ラウンドロビン、IP-ハッシュ提供のように、対処する唯一のロードバランシングアルゴリズムのアドレッシングハッシュを理解するために 、最小接続、加重を( 体重)、主にアドレッシングハッシュを使用して実装のRedis。

ただ、それは(仮想ノードを含む)、一貫性のあるハッシュアルゴリズムや、ハッシュスロットであることが重要ピックアップ
:整合性ハッシュ参照
https://my.oschina.net/xianggao/blog/394545?fromerr=Df6BNkP4
ハッシュスロットアルゴリズム:
HTTPS ://www.cnblogs.com/abc-begin/p/8203613.html

16384ハッシュスロットを固定しているクラスタのRedisは、対応するキーハッシュスロットを取得することができる、CRC16各キーの値、及び次いでモジュロ16384を算出します。
各マスタのRedisのクラスタは、例えば、3人のマスターは、マスター可能性のある各ホールド5000以上のハッシュスロットがあり、スロットの一部を保持します。ハッシュスロットは、ノードの追加と削除が簡単であることができ、マスタを追加し、意志ハッシュスロットは、過去の他のマスタの一部を移動させる、マスターを低減するには、異なるマスターハッシュスロットまで移動されます。モバイルハッシュスロットのコストは非常に低いです。クライアントAPIは、指定されたデータは、それらをハッシュタグによって実装ハッシュスロット、を手放すことができます。マシンのダウンタイムは、他の2つのノードが、影響はありません。キーは、ハッシュスロット、いないマシンを見つけることですので。

王新(QQ:475660)30年以上働いて、広州に住む著者について。開発経験の十年は、より多くのJava、インスタントメッセージング、NoSQLの、BPM、ビッグデータの分野で経験しました。
現在、オープンソース製品のメンテナンスます。https://gitee.com/475660/xyTalk-pc

1、コピー処理からのRedisについての主な話

いくつかのキーがあります:
マスターノードは、スレーブノードは、主に水平方向の拡張のために責任が使用されているノードからの読み取り、書き込みを担当して、我々は読んでないと書き込み分離、スレーブノードの拡張は、スループット読む向上させることができます。
あなたはオフにした場合のダウンタイムのマスタデータが空の場合、その場合には、マスターの永続性は多分、その後、再起動可能性があるため、マスターノードは、データのスレーブノードのホットスタンバイ・マスター・ノードとして使用することは推奨しません、永続オンにする必要がありますコピー後、スレーブノードのデータも失われます。
それはマスターノードにPSYNCコマンドを送信するときには、スレーブノードを起動すると。
スレーブノードが最初にマスタノードに接続され、これは、完全な再同期フルボリュームコピーをトリガします。この時、マスターは、クライアントのクライアントは、すべての新しい書き込みコマンドがメモリ内キャッシュから受信しながら、RDBは、スナップショットファイルを生成を開始するためにバックグラウンドスレッドを開始します。
HTTPは、メカニズムによって相殺されます。
マスタノードの再起動またはデータが変更された場合、スレーブノードは、異なる実行IDに応じて区別されるべきです。
詳細を参照してくださいます。https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-master-slave.md


2、Redisのは、再開からの複製の主なメカニズムは何ですか?
バックログ、オフセット


図3に示すように、マスタノードは、マスタノードIPに応じてそれを配置することですか?
交換用のマスターノードが検索またはIPアドレスを交換することができない場合ので、マスタ実行IDに基づいて配置されていません

4、ノードはキーそれを期限切れになりますか?
いいえ、マスターノードは、キーのうち、LRUを通過した後、スレーブノードにdelコマンドをシミュレートしますします。

5、高可用性クラスタRedisのセンチネルの切り替え機構を説明
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-sentinel.md

6、データクラスタセンチネル損失の問題の解決策どのようなもの
に提供
分・ツー・ライト-奴隷。1
分-MAX-LAG-奴隷10の
意味が少なくとも1つのスレーブ、データレプリケーションの遅延が10秒を超えてはなりません。これは、非同期レプリケーションへのデータの損失を減らすだけでなく、データ損失のスプリットブレインを減らすことができます

7、どのようにセンチネルクラスタ自動検出メカニズム
パブ/サブ実施を通じて、同時に__ __sentinelする方法:こんにちは、このメッセージを送信するチャネルが、他の消費者センティネルのニュース、他のセンチネルの存在の認識を。
2秒毎に一度送られ、そのホスト、IPの内容は、同じようRUNID。

8、話slave->マスター選出アルゴリズム
マスターがセンチネルスタンバイスイッチングのほとんどを許可、odown宣告された場合、それは、スレーブを選出次のことを考慮する必要があります:
1、切断マスターの長さ;
2、スレーブ優先順位
3より多くの位置は、重複、より優先度のコピーオフセット
選挙は出てこない場合は、私たちが最も小さいRUNIDを選んだ上記のすべての4を、

9.何が永続的な双方向のRedisの?

RDB:永続データのための実行サイクル
AOF:ログ、追加のみのモードに書き込まれた各コマンドは、すべてのデータセットが再起動し、バックログAOFを再生することによって構築

10は、どのような長所と短所のRDBの持続性をRedisの?
RDBデータファイル(サブ処理期間)複数の、コールドスタンバイのために非常に適しています。
Redisのは、ちょうど存続するために、子プロセスのディスクIOをforkするので、非常に少ないのRedisのための外部サービスの提供のパフォーマンスに影響を与える
より速くAOF再起動よりも、より高速なデータ復旧
欠点があるため必要RDBのデータAOFの損失が少ないので、存在しないことです5分またはマスターに障害が発生し、それが簡単にデータを失うために一度長く持続。

11、Redisの場合は、高可用性と高い並列性を確保するには?
このトピックでは、比較的大きいです。私はいくつかに言うことができます。参考
https://blog.csdn.net/zero__007/article/details/86564520

12、どのように二重のRedisのデータベースと書き込み一貫性を確保するには?
主なポイントは、パターン別として、更新テストデータキャッシュにデータベースを書いて最初で、その後、キャッシュを削除します

13、データ型が何であるかRedisの?どちらがより適切な場面で使用されていますか?
あまりにも基本的な、ジュニア開発者に加えて、めったにお願い致します
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-data-types.md

14、Redisのデータの有効期限ポリシーは何ですか?メモリのどのようなメカニズム出ていますか?
有効期限ポリシーは、定期的に期限切れになったかどうかを確認されていない、メモリが不足しています。
メモリ除去メカニズム:
noeviction:メモリが書き込まれ、新たなデータを収容するのに十分でない場合は、新しい書き込み操作は、それが嫌れた、これはそれで誰もが一般的ではないと文句を言うだろう。
allkeys-LRU:新しいデータを収容するのに十分なメモリが鍵空間で書かれている場合は、キーが(これが最も一般的です)最近使用少なくとも除去されます。
allkeysランダム:メモリは、新しいデータを収容するのに十分ではない、ランダムにキーを削除キースペースで書かれているランダム、キーは確かに最近最もああ殺すために使用されなければならない理由は、これは、人々がそれを使用する一般的ではありません。
揮発性LRU:十分なメモリがキー空間に書き込まれた新しいデータを収容するために、有効期限が設けられているキーは、最低使用頻度(これは一般的に適切ではない)を除去します。
揮発性ランダム:新しいデータを収容するのに十分なメモリが鍵空間で書かれているときは、有効期限に提供され、ランダムなキーを削除します。
揮発性-TTL:メモリが新しいデータを保持するには不十分である鍵空間で書かれている有効期限を提供され、キーの有効期限は、以前の優先順位が削除されています。

15、Redisのは、どのように解決への同時競争書き込む
達成するために、そのようなノードの飼育係として、サードパーティ分散ロックと、1
つまり最初時計、マルチセット、EXECトランザクション実装である、独自の楽観的ロックのRedisと(トランザクション)を達成するために、2。
擬似コード:

コードをコピー
WATCHにmykey 
ヴァル= GETにmykey 
ヴァル=ヴァル+ 1 
MULTI 
SETにmykey $ valの
EXEC
コードをコピー

 


3、特定のアルゴリズムのための赤ロックhttp://www.redis.cn/topics/distlock.htmlを参照して、Redissonクライアントと達成するための主な方法:

コードをコピー
パブリッククラスDistributedRedisLock { 
プライベート静的Redisson redisson = RedissonManager.getRedisson()。
プライベート静的最後の文字列LOCK_TITLE =「redisLock_」。

パブリック静的ボイド取得(文字列ロック名){ 
文字列キー= LOCK_TITLE +ロック名。
RLOCK mylock = redisson.getLock(キー)。
mylock.lock(2、TimeUnit.MINUTES)。//ロックの提供带タイムアウト参数、タイムアウト结束强制解锁、防止死锁
System.err.println( "====== ======ロック" +にThread.currentThread()のgetName()); 
} 

パブリック静的ボイド放出(文字列ロック名){ 
文字列キー= LOCK_TITLE +ロック名。
RLOCK mylock = redisson.getLock(キー)。
mylock.unlock(); 
System.err.println( "======ロック解除======" +にThread.currentThread()のgetName()。)。
} 
}
コードをコピー

 

16、キャッシュ雪崩を解決する方法と浸透
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md

17、話のRedisクラスターの可用性とスタンバイスイッチング原則
原則Redisのクラスタはセンチネルとほぼ同様、非常に入手可能です。

審判のノードがダウンした
ノードがpfail、主観的なダウンタイムであること、その後、別のノードがダウンしたとみなします。複数のノードが考慮されている場合は、別のノードがダウンし、そのほぼ同じ原理センチネル、SDOWN、odownで、客観的ダウンタイムを失敗しています。

ノードは、ピンポンを戻っていないクラスタノードタイムアウトでは、それはpfail考えられます。

ノードは、ノードpfailを考慮した場合、ノードの半分以上がpfailとみなされた場合、そのメッセージは、それは失敗となり、他のノードへのpingは、pingをゴシップます。

ノードから濾過
マスターノードを選択するためのスイッチは、すべてのスレーブノードから、ダウンタイムのマスターノード。

それはクラスタノードタイムアウトを超えた場合に、各スレーブノードチェック時間と切断マスターノードは、*クラスタスレーブ妥当性因子は、マスタに切り替えない資格がありません。

ノード選出から
各スレーブノードは、マスター上のすべてのデータを自分のコピーを相殺するために選挙の時間を設定するために、ノードからのより大きな(よりデータコピー)、より多くの時間選挙フロント、優先選挙オフセットによる。

すべてのマスターノード開始スレーブ世論調査では、マスターノードのほとんど(N + 1/2)が、その後の選挙を通じて、それはマスターにノードから切り替えることができ、いずれかのノードのために投票した場合、投票に選挙を行うことをスレーブに。

ノードから切り替え、マスターノードからスイッチングノードを行います。

センチネル比較
センチネルと全体のプロセスに比べては、なるように、複製およびセンチネル機能の強力な、直接統合のクラスタをRedisの、非常によく似ています。

分散アルゴリズムRedisのトークに対処するための18、
最初nginxのは、4つの主要なアルゴリズム、ラウンドロビン、IP-ハッシュ提供のように、対処する唯一のロードバランシングアルゴリズムのアドレッシングハッシュを理解するために 、最小接続、加重を( 体重)、主にアドレッシングハッシュを使用して実装のRedis。

ただ、それは(仮想ノードを含む)、一貫性のあるハッシュアルゴリズムや、ハッシュスロットであることが重要ピックアップ
:整合性ハッシュ参照
https://my.oschina.net/xianggao/blog/394545?fromerr=Df6BNkP4
ハッシュスロットアルゴリズム:
HTTPS ://www.cnblogs.com/abc-begin/p/8203613.html

16384ハッシュスロットを固定しているクラスタのRedisは、対応するキーハッシュスロットを取得することができる、CRC16各キーの値、及び次いでモジュロ16384を算出します。
各マスタのRedisのクラスタは、例えば、3人のマスターは、マスター可能性のある各ホールド5000以上のハッシュスロットがあり、スロットの一部を保持します。ハッシュスロットは、ノードの追加と削除が簡単であることができ、マスタを追加し、意志ハッシュスロットは、過去の他のマスタの一部を移動させる、マスターを低減するには、異なるマスターハッシュスロットまで移動されます。モバイルハッシュスロットのコストは非常に低いです。クライアントAPIは、指定されたデータは、それらをハッシュタグによって実装ハッシュスロット、を手放すことができます。マシンのダウンタイムは、他の2つのノードが、影響はありません。キーは、ハッシュスロット、いないマシンを見つけることですので。

おすすめ

転載: www.cnblogs.com/Koaler/p/11933071.html