マインドマップギャラリー レディス
これは Redis に関するマインド マップであり、詳細な紹介と包括的な説明が含まれています。興味のある友人に役立つことを願っています。
2023-12-21 17:36:42 に編集されましたレディス
事務
意味
トランザクションは個別の分離操作であり、トランザクション内のすべての操作はシリアル化され、順番に実行されます。他の顧客サービス端末から送信されたコマンドによって中断されることはありません。
効果
複数のコマンドを連結して、他のコマンドがキューに入るのを防ぎます。
注文
WATCH キー [キー ...]
multi を実行する前に、最初に watch key1 [key2] を実行します。これにより、トランザクションの実行前に 1 つ (または複数) のキーが他のコマンドによって変更されると、トランザクションは中断されます。
マルチ
入力されたコマンドはコマンド キューに入りますが、実行されません。Exec コマンドが実行されるのを待ってから、順番に実行されます。
幹部
コマンドキューを実行する
破棄
コマンドキューを削除する
トランザクションエラーの処理
チームの形成が成功し、すべてのコマンドが正常に実行されます。
チームが正常に形成された場合は、破棄を選択すると、すべてのコマンドが実行されなくなります。
キュー内のコマンドでエラーが発生した場合、実行中にキュー全体がキャンセルされます。
チームは正常に形成されますが、実行中に特定のコマンドが失敗します。間違ったコマンドを除いて、他のすべてのコマンドが実行されてしまいます。
Redis トランザクションはアトミックではありません
Redis トランザクションの 3 つの主要な特徴
個別の隔離作業
トランザクション内のすべてのコマンドはシリアル化され、順番に実行されます。トランザクションの実行中、他のクライアントから送信されたコマンド要求によって中断されることはありません。
分離レベルの概念がない
トランザクションが送信されるまでは命令が実際に実行されないため、キュー内のコマンドは送信されるまで実際には実行されません。
アトミック性の保証はない
トランザクション内のコマンドの実行が失敗した場合でも、後続のコマンドはロールバックせずに実行されます。
RedisトランザクションとMysqlトランザクションの違い(ACID周り)
持続性
RDB
コア構成
保存パス: デフォルトは起動ディレクトリにあります。設定ファイルを変更することでパスを変更できます。
dbfilename 設定ファイル名
保存
何秒間に何回の操作が実行されましたか?
トリガーRDB
保存を自動的にトリガーする
RDBの永続化が完了するまでメインプロセスをブロックします
手動保存: bgsave
Redis はスナップショット操作をバックグラウンドで非同期に実行し、スナップショットはクライアントの要求に応答することもできます。
最後にスナップショットを実行した時刻は、lastsave を通じて取得できます。
メインプロセスをブロックしません
フラッシュオールコマンドを実行する
flashall コマンドを実行すると dump.rdb ファイルも生成されますが、これは空で意味がありません。
flashdb コマンドは dump.rdb ファイルを生成しません
Redisを通常どおり終了します
redis.conf のその他の構成
bgsave エラーで書き込みを停止
Redis がディスクに書き込めない場合は、Redis の書き込み操作を直接オフにします。はいを推奨します
rdbcompression 圧縮ファイル
圧縮に CPU を消費したくない場合は、この機能をオフに設定できます。はいをお勧めします。
rdbchecksum は整合性をチェックします
スナップショットを保存した後、データ検証に CRC64 アルゴリズムを使用するように Redis に要求することもできます。
永続化プロセス (メモリスナップショット)
Redis は永続化のために子プロセスを個別に作成 (フォーク) し、永続化プロセスが完了した後、この一時ファイルを使用して最後に永続化されたファイルを置き換えます。プロセス全体を通じて、メイン プロセスは IO 操作を実行しないため、非常に高いパフォーマンスが保証されます。大規模なデータ リカバリが必要であり、データ リカバリの整合性がそれほど重要ではない場合は、RDB 方式の方が AOF 方式よりも効率的です。高効率。 RDB の欠点は、最後の永続化以降のデータが失われる可能性があることです。
Fork の機能は、現在のプロセスと同じプロセスをコピーすることです。新しいプロセスのすべてのデータ(変数、環境変数、プログラムカウンタなど)は元のプロセスと同じ値になりますが、まったく新しいプロセスであり、元のプロセスの子プロセスとして機能します。
アドバンテージ
大規模なデータ復旧に最適
それほど高くないデータの整合性と一貫性の要件により適しています
ディスク容量を節約する
早い回復
短所
最後のスナップショットからの変更はすべて失われる可能性があります
AOF
導入
各書き込み操作をログの形式で記録します。ファイルは追加のみ可能ですが、再書き込みはできません。
デフォルトでは有効になっていません
追加のみいいえ
AOFとRDBが同時に有効になっている場合は、AOFが優先されます。
永続化プロセス
クライアントが要求した書き込みコマンドは AOF バッファに追加されます。
AOF バッファは、AOF 永続性ポリシーに従って、ディスク上の AOF ファイルに対する操作を同期します。
AOF ファイルが書き換えポリシーを超える場合、または手動で書き換えられる場合、AOF ファイルの容量を圧縮するために AOF ファイルが書き換えられます。
Redis サーバーが再起動すると、AOF ファイルに書き込み操作がロードされます。
同期周波数の設定
常にappendfsync
常に同期され、すべての Redis 書き込みはすぐにログに記録されます。パフォーマンスは低下しますが、データの整合性は向上します。
毎秒appendfsync
1 秒ごとに同期し、まずログを AOF ファイルのメモリ バッファに書き込み、次にバッファの内容を 1 秒ごとにディスクに書き込みます。ダウンタイムが発生すると、この秒のデータが失われる可能性があります。
appendfsync いいえ
Redis は積極的に同期を行わず、同期のタイミングをオペレーティング システムに任せます。
アドバンテージ
バックアップメカニズムがより堅牢になり、データが簡単に失われません。
エラー操作を処理するための読み取り可能なログ ファイル
短所
RDBよりも多くのディスク容量を占有します
回復が遅い
読み取りと書き込みが毎回同期されると、パフォーマンスが圧迫されます。
修復不可能なバグがいくつかあります。
Redis の期限切れキーの削除戦略
Redis は、定期的な削除戦略と遅延削除戦略を組み合わせて使用します。
定期的な削除: 時々、有効期限のあるキーがランダムに選択され、有効期限が切れているかどうかがチェックされ、有効期限が切れたら削除されます。
1 秒ごとに 10 回繰り返し、ランダムに 20 個のキーを選択して、キーの有効期限が切れているかどうかを確認します。キーの 25% が期限切れになっている場合は、この動作を繰り返します。
期限切れのキーが大量に失われることになる
遅延削除: データの有効期限が切れても、有効期限が切れたキーにアクセスすると最初に処理されずに削除されます。
空間を時間と交換する
期限切れのキーが多数欠落し、チェックされない場合、遅延削除は実行されず、大量の期限切れのキーがメモリに蓄積され、Redis のメモリが枯渇してしまいます。このとき、メモリ削除メカニズムが使用されます。
マスター/スレーブ レプリケーション
とは
ホスト データが更新されると、データはポリシーに従ってマスター/スレーブ メカニズムに自動的に同期され、マスターは書き込みを担当し、スレーブは読み取りを担当します。
何ができますか
読み取りと書き込みの分離、パフォーマンスの拡張
可用性を向上させるための災害復旧と迅速な復旧
遊び方
複数の Redis サービスを開始する
スレーブライブラリの設定
IPポートのスレーブを実行
マスター/スレーブ情報のクエリ
情報の複製
よくある状況
1人のマスターと2人のサーヴァント
スレーブマシンは書き込みできますか?設定は可能でしょうか?
書き込みも設定もできません。
ホストがシャットダウンされた後はどうなりますか?スレーブは上位またはスタンバイ状態ですか?
スレーブ機はスタンバイ状態です
マスターが戻ってきて新しいレコードを追加した後、スレーブはそれをスムーズにコピーできますか?
できる
スレーブ マシンの 1 つがダウンした後はどうなりますか?このまま大軍についていけるのか?
できる
聖火を渡す
マスターとスレーブの二重 ID を持つマシンはデータを書き込むことができますか? ?
いいえ、スレーブの ID を持っている限り、データを書き込むことはできません。
主に反顧客
マスター マシンがダウンしている場合は、スレーブ マシンを手動でマスター マシンに切り替えることができます。
コピー原理
スレーブが起動し、マスターに正常に接続すると、同期コマンドが送信されます。
マスターはバックグラウンド保存プロセスを開始するコマンドを受信し、データセットを変更するために受信したすべてのコマンドを収集します。バックグラウンドプロセスが完了すると、マスターはRDBデータファイル全体をスレーブに転送して完全な同期を完了します。
フルコピー: データベースファイルデータを受信した後、スレーブサービスはそれを保存し、メモリにロードします。
増分レプリケーション: マスターは、同期を完了するために、新しく収集されたすべての変更コマンドをスレーブに渡し続けます。
ただし、マスターが再接続されている限り、完全同期(フルレプリケーション)が自動的に実行されます。
セントリーモード
Sentinel は機能モードで実行される Redi プロセスであり、次の 3 つの主要なタスクがあります。
モニター
すべてのマスター/スレーブ ライブラリに PING コマンドを送信し、指定した時間内に応答がない場合はオフラインと判断します。
主観的なオフライン
PING コマンドに対するマスターまたはスレーブ ライブラリの応答がタイムアウトになったことをセンチネルが検出すると、現在のセンチネルは最初にそれをマークします。 「主観的オフライン」の場合
オフラインでの目標
N/2 の監視員がメイン データベースを主観的にオフラインとしてマークすると、メイン データベースは「客観的にオフライン」としてマークされます。
メイン データベースが客観的にオフラインとしてマークされている場合にのみ、Sentinel は新しいメイン データベースを選択します。
センチネルが 1 つしかなく、ネットワーク上の理由やメイン データベースへの過度の圧力により、メイン データベースがセンチネルに時間内に応答せず、センチネルによって主観的オフラインとしてマークされます。現時点では、センチネルは 1 つだけです。センチネルがある場合、新しいメイン データベースが直接選出されます。クラスターでは、N/2 1 を超えるセンチネルがメイン データベースを主観的オフラインとしてマークする必要があります。客観的にオフラインとしてマークされ、監視員は誤った判断を減らすために新しいメインデータベースを選択します。
マスターを選択してください
マスター ライブラリに障害が発生した場合は、スレーブ マシンから新しいマスター ライブラリが選択されます。
新しいマスター データベースを選択するプロセス
フィルター
ライブラリの現在のオンライン状態から、以前のネットワーク接続状態を判断することも必要です。
スコア
スレーブライブラリの優先順位
ライブラリからのコピーの進行状況
スレーブライブラリID番号
通知する
新しいマスター ライブラリの情報を他のスレーブ ライブラリに送信し、他のスレーブ ライブラリに新しいマスター ライブラリとの接続を確立させ、データの複製を実行させます。
とは
顧客志向の自動バージョンでは、ホストに障害が発生しているかどうかをバックグラウンドで監視でき、ホストに障害が発生した場合は、投票数に基づいてスレーブ データベースからメイン データベースに自動的に切り替わります。
遊び方
新しい Sentinel.conf ファイルを作成します。名前は間違ってはいけません
センチネルを設定し、内容を入力します
センチネル モニター mymaster 127.0.0.1 6379 1
このうち、mymaster は監視オブジェクトのサーバー名で、1 は移行に同意するセンチネルの最小数です。
センチネルを開始する
/usr/local/bin
redis-sentinel /myredis/sentinel.conf を実行します。
マスターが電話を切ると、スレーブの中から新しいマスターが選択されます。
選挙のルール
優先度
redis.conf のデフォルト:replica-priority 100、値が小さいほど優先度が高くなります。
オフセット
オフセットは、元のホストから取得された最も完全なデータを指します。
ルニード
各 Redis インスタンスが開始されると、40 桁の runid がランダムに生成されます (情報サーバーを通じて取得および表示されます)。
集まる
クラスターとは
Redisの水平展開
クラスター内の一部のノードで障害が発生したり、通信できなくなったりした場合でも、クラスターはコマンド要求の処理を続行できます。
マスター マシンがダウンしている場合、スレーブ マシンは自動的にマスターに昇格します。
構成
Redisクラスター構成の変更
クラスタ有効 はい、クラスタ モードをオンにします
クラスタ構成ファイルnodes-6379.confはノード構成ファイル名を設定します
クラスターノードタイムアウト 15000 は、この時間 (ミリ秒) が経過すると、クラスターがマスターとスレーブを自動的に切り替えます。
起動する
redis-cli --cluster create --cluster-replicas 1 192.168.11.101:6379 192.168.11.101:6380 192.168.11.101:6381 192.168.11.101:6389 192.168.11.101:6390 .168.11.101:6391
127.0.0.1 は使用せず、実際の IP アドレスを使用してください。
スロットとは
Redis クラスターには 16384 個のハッシュ スロットが含まれており、データベース内の各キーはこれら 16384 個のスロットの 1 つに属します。
同じスロットにないキー値の場合、mget や mset などのマルチキー操作は使用できません。
クラスタリングの欠点
マルチキー操作はサポートされていません
マルチキー Redis トランザクションはサポートされていません。 lua スクリプトはサポートされていません
より複雑な
クラスターに少なくとも 3 つのノードが必要な理由
ノードがダウンしていて、ピンポン投票メカニズムによってノードの半数以上がダウンしていると判断した場合、ノードが 2 つしかなく、1 つのノードがダウンしている場合は、もう 1 つのノードが投票します。 50% のみですが、そのうちの半分は、このクラスターは失敗しないため、少なくとも 3 つのノードが必要です
クラスターに少なくとも 6 台のサーバーが必要な理由
クラスターには少なくとも 3 つのノードが必要であり、各ノードにはバックアップ マシンが必要であるため、クラスターには少なくとも 6 つのサーバーが必要です。
JAVA接続開発Jedis
依存関係: <artifactId>jedis</artifactId>
JedisPool 接続プール
setBlockWhenExhausted
/接続が枯渇したときにブロックするかどうか、false は例外を報告する、true はタイムアウトまでブロックする、デフォルトは true
setTestOnBorrow
接続プールから接続を取得するときに接続が非アクティブ化されているかどうかを確認します
JedisPool オブジェクトの自動配線
5 つの主要なデータ型
応用
基本的な使い方
導入手引き
redis-benchmark: 自分のノートブックで実行してノートブックのパフォーマンスを確認できるパフォーマンス テスト ツール。
redis-check-aof: 問題のある AOF ファイルを修復します。rdb と aof については後で説明します。
redis-check-dump: 問題のある dump.rdb ファイルを修正します
redis-sentinel: Redis クラスターによって使用されます
redis-server: Redisサーバー起動コマンド
redis-cli: クライアント、操作の入り口
設定ファイル redis.conf
バックグラウンドで開始
ノーをイエスにデーモン化する
サーバーを起動します redis-server /myredis/redis.conf
クライアントを使用して redis-cli にアクセスします
-p はポートを指定します
-c クラスターモード
ネットワーク関連の設定
練る
書き込みがないということは、すべての IP アドレスに無制限にアクセスできることを意味します。
保護モード保護モード
デフォルトでは有効になっており、すべての IP アドレスからのアクセスを許可しても、アクセスは成功しません。
ポートポート番号
デフォルト 6379
tcp-backlog 接続キュー
タイムアウト タイムアウト時間
アイドル状態のクライアントが閉じるまでにどのくらい時間がかかりますか? 0 はこの機能をオフにします。つまり、接続は切断されません。
tcp-keepalive クライアントのハートビート検出
0 に設定すると、キープアライブ検出は実行されません。
共通構成
デーモンスレッドをデーモン化する
デフォルトの no 設定は yes です。これはデーモン プロセスであり、バックグラウンドで開始できます。
pidfile pid ファイルが保存される場所
loglevel ログレベル
debug: 開発/テスト段階に適した大量の情報を出力および生成します。
冗長: あまり役に立たない情報がたくさん含まれていますが、デバッグ レベルほどわかりにくくはありません。
注意: 適度に冗長なので実稼働環境に適しています
警告: 非常に重要かつ重大な警告メッセージのみを記録します
logfile ログファイル名
デフォルトはログファイルの標準出力です
データベースはデータベースの数を設定します
デフォルトのデータベース数は 16 で、デフォルトで選択されたデータベースは 0 です。
限界
maxclient サーバー接続の最大数
デフォルトは 1W 接続です。上限に達すると、接続は拒否されます。
最大メモリ
必ず設定することをお勧めします。設定しないと、メモリがいっぱいになり、サーバーがクラッシュする可能性があります。
maxmemory-policy メモリ削除ポリシー
volatile-lru: LRU アルゴリズムを使用して、有効期限が設定されたキーのみを削除します (最も最近使用されていないキー)。
volatile-ttl: TTL 値が最も小さいキー、つまり最近期限切れになるキーを削除します。
volatile-random: 期限切れのセットからランダムなキーを削除し、有効期限が設定されたキーのみを削除します。
allkeys-lru: LRU アルゴリズムを使用して、設定されているすべてのキーからキーを削除します
allkeys-random: 設定されているすべてのキーからランダムなキーを削除します。
noeviction: 削除されません。書き込み操作の場合、エラー情報のみが返されます。
IO制限
io-threads-do-reads IO マルチスレッドを有効にするかどうか
デフォルトは「いいえ」です。有効になっている場合は、「はい」に変更します。
io-threads IO スレッドの数
4 コア マシンの場合は 2 または 3 スレッド、8 コア マシンの場合は 6 スレッドを設定することをお勧めします。スレッドの数はマシンのコア数よりも少なく、8 を超えないようにしてください。
Redisは閉鎖されました
単一インスタンスのシャットダウン
redis-cli のシャットダウン
複数のインスタンスのシャットダウン
redis-cli -p 6379 シャットダウン
シングルスレッドの複数のIO多重化
Redis6.0 ではマルチスレッドが導入されています
NoSQLデータベース
NoSQLデータベースとは何ですか
SQL標準に準拠していない
ACIDをサポートしていません
原子性
一貫性
分離
持続性
SQLのパフォーマンスをはるかに上回ります
該当シーン
データの高度な同時読み取りと書き込み
大量のデータの読み取りと書き込み
データの拡張性が高い
使用されないシナリオ
トランザクションのサポートが必要
構造化されたクエリ ストレージ、複雑な関係の処理、およびアドホック クエリが必要
アドホッククエリ: ユーザーは自分のニーズに応じてクエリ条件を柔軟に選択でき、システムはユーザーの選択に基づいて対応する統計レポートを生成します。
Redis の 5 つの主要なデータ型
文字列型
増加
set <key><value>キーと値のペアを追加します
setex <key><expiration time><value> キーの値を設定する場合、有効期限を秒単位で設定します。
setnx <key><value>キーが存在しない場合にのみキーの値を設定します
mset <key1><value1><key2><value2>1 つ以上のキーと値のペアを同時に設定します
チェック
get <key> 対応するキー値を問い合わせます
strlen <key> は値の長さを取得します
mget <key1><key2><key3> 1 つ以上の値を同時に取得します
getrange <キー><開始位置><終了位置> Java の部分文字列、フロント パッケージ、バック パッケージに似た値の範囲を取得します。
変化
incr <キー>
キーに格納されている数値を1増やします。
数値のみを操作できます。空の場合、新しい値は 1 になります。
Decr <キー>
keyに格納されている数値を1減らす
数値のみを操作できます。空の場合、新しい値は -1 です。
incrby / decrby <key><step>key に格納されている数値を増減します。カスタムステップサイズ。
消去
デルキー
特別
append <key><value> は、指定された <value> を元の値の末尾に追加します。
getset <キー><値>
古い値を新しいものに置き換え、新しい値を設定し、同時に古い値を取得します
製品番号と注文番号は、文字列の増加する数値特性を使用して生成されます。
リストタイプ
増加
lpush/rpush <key><value1><value2><value3> .... 左/右から 1 つ以上の値を挿入します。
チェック
lrange <キー><スタート><ストップ>
インデックスの添え字に従って要素を取得します (左から右)
lindex <key><index>インデックスの添え字に従って要素を取得します (左から右)
llen <key> はリストの長さを取得します
変化
lset<key><index><value>は、リストキー内の添え字がindexである値をvalueに置き換えます。
消去
lrem <key><n><value>左から value に等しい n 個の要素を削除します (左から右へ)
特別
lpop/rpop <key> 左/右から値を出力します。値はキー内にあり、値はキー内にあります。
rpoplpush <key1> <key2> は、<key1> リストの右側から値を吐き出し、それを <key2> リストの左側に挿入します。
linsert <key> before <value><newvalue> <value> の後に <newvalue> を挿入して値を挿入します
フレンドリスト、ファンリスト、メッセージキュー、最新ニュースランキングなど。 rpush メソッドはメッセージをキューに入れることと同等であり、lpop/rpop はメッセージをキューから取得して消費することと同等です。
ハッシュタイプ
増加
hset <key><field><value> は、<key> コレクションの <field> キーに <value> を割り当てます。
hmset <key1><field1><value1><field2><value2>... ハッシュ値を一括設定
チェック
hget <key1><field> は <key1> コレクション <field> から値を取得します
hmget <key1><field1> <field2>... ハッシュ値を一括取得
hlen <key> はハッシュ内のフィールド値の数を取得します
hexists<key1><field>指定されたフィールド field がハッシュ テーブル キーに存在するかどうかを確認します。
変化
hincrby <key><field><increment> は、ハッシュ テーブル キーのフィールド field の値に増分を加算します (負は減算を意味します)。
hsetnx <key><field><value> は、フィールド field が存在しない場合にのみ、ハッシュ テーブル キーのフィールド field の値を value に設定します。
消去
hdel <key><field> は、<key> コレクション内の指定された <field> を削除します。
特別
hgetall <key> は、すべてのフィールドと値を取得します。
hkeys <key> はハッシュ セットのすべてのフィールドをリストします。
hvals <key> はハッシュセットのすべての値をリストします
オブジェクトを使用して、ユーザー情報、製品情報、注文情報などを保存します。
Zセットタイプ
増加
zadd <キー><スコア 1><メンバー 1><スコア 2><メンバー 2>…
1 つ以上のメンバー要素とそのスコア値を順序付きセットのキーに追加します
チェック
zcard<key> は順序付きセット内の要素の数を返します。
zcount <key><min><max> はセット、つまりスコア区間内の要素の数をカウントします。
zrange <key><start><stop> [WITHSCORES] 小さいものから大きいものへ並べ替えます
添え字が <start><stop> の間にある順序付きセット キー内の要素を返します。
WITHSCORES を使用すると、スコアと値を結果セットに返すことができます。
zrevrange <key><start><stop> [WITHSCORES] 大きいものから小さいものへ並べ替えます
zrangebyscore キー最小最大 [スコア付き] [オフセット数を制限]
スコア値が最小と最大の間 (最小または最大に等しい場合を含む) であるソートされたセット キーのすべてのメンバーを返します。順序付きセットのメンバーは、スコア値の増加順 (小さいものから大きいものへ) に配置されます。
zrevrangebyscore key max min [withscores] [limit offset count] (パラメーターは size であることに注意してください)
上記と同じですが、最大から最小の順に並べています。
zrank <key><member> は、順序付きセット キー内のメンバーのランクを返します。順序付きセットのメンバーは、スコア値の増加順 (小さいものから大きいものへ) に配置されます。ランキングは 0 に基づいて行われます。つまり、スコア値が最も小さいメンバーが 0 にランクされます。
zrevrank <key><member> メンバーのランキングをスコア値の降順(大きい順)に取得します。
変化
Zincrby <key><increment><member> は要素のスコアに増分を追加します
消去
zrem <key><member>コレクション内の指定された値を持つ要素を削除します
特別
ランキング: たとえば、ビデオ Web サイトでは、ユーザーがアップロードしたビデオをランク付けする必要があります。
セットタイプ
増加
sawd <キー><値 1><値 2> .....
1 つ以上のメンバー要素をコレクション キーに追加すると、既存のメンバー要素は無視されます。
チェック
smembers <key> はコレクションのすべての値を取り出します
scard<key> はコレクション内の要素の数を返します
ismember<key> <value> コレクション内の値がすでに存在するかどうかを問い合わせます
変化
消去
srem <key><value1><value2> .... コレクション内の要素を削除します
特別
spop <key> はコレクションからランダムな値を吐き出します
smove <source><destination>value は、コレクション内の値をあるコレクションから別のコレクションに移動します
sinter <key1><key2> は、2 つのセットの交差要素を返します。
sunion <key1><key2> は 2 つのセットの和集合要素を返します。
sdiff <key1><key2> は、2 つのセットの差分要素 (key1 内の要素、key2 内の要素を除く) を返します。
投票記録 共通の友人、共通の興味、分類タグ