Redisパイプライン、トランザクション、パブリッシュおよびサブスクライブ、有効期限、フィルターなどの一般的に使用される高度な機能に関するメモ(パート2)

前の記事では、redisのパイプライン関数について説明し、内部の基本的なLinux操作の一部を拡張しました。この記事では、前の記事の冒頭で述べたいくつかの高度な関数を完了します。前の記事では、記録される高度な関数は次のとおりです。

Pipeline
Transaction
Publish / Subscribe
Expiration
Bloomフィルター

事務

パイプラインに加えて、redisにはトランザクションもあります。これにより、一連の操作のアトミック性をある程度保証できます。主な用途multiexecwatchおよびunwatchこれらのキーワード。
トランザクションはマルチで始まり、execに入って正式に実行されるまで、多くの操作命令を実行できます。
クライアントが2つある場合、クライアントAが最初にマルチに入り、次に一連のredis操作に入り、次にクライアントBがマルチに入り、その後一連の操作に入りますが、クライアントBが最初にexecを実行し、クライアントA execを実行した後、Bの操作が実際に最初に実行されます。
もちろん、上記のシーケンスはサーバーが受信した時刻を指していると言う方がより正確ですネットワークやその他の理由により、最初に入力することは最初に受信することを意味しません。
トランザクション操作の例は次のとおりです。

multi
set k1 111
get k1
exec

上記の操作に加えて、トランザクションを監視で使用することもできます。監視は、1つ以上のキーの変更を監視するために使用されます。監視プロセス中に対応するキーの値が変更された場合、その後のトランザクションの実行は失敗します。次に例を示します。
client1は最初にキーをリッスンしてからトランザクションを開始し、次にいくつかの操作を実行しますが、execは実行しません

watch k1
multi
set k1 111
get k1

次に、client2はキーの値を変更します

set k1 222

次に、client1に戻ってexecを実行すると、戻り結果がnilであることがわかります。これは、実際に監視によって監視されているデータが変更され、トランザクション全体が失敗したことを示しています。

パブリッシュ/サブスクライブ

redisの基本的なデータ構造について説明するblpop、リストには非同期ブロッキング関数が含まれています。use brpopコマンドは、結果が得られるまでクライアントをブロックできます。
この関数は、ある程度同様のメッセージの監視と消費を実現できますが、データが取得されるとすぐに終了します。
そして、redis自体が実際のニュースリリースとサブスクリプション機能を実装し、たとえば、操作を使用publishしてsubscribe注文します。
コンシューマーはサブスクライブを使用してチャネルチャネルを監視します。

subscribe channel1

コマンドラインウィンドウを再度開き、publishを使用して上位チャネルにメッセージを発行します。

publish channel1 hello

公開後、上の最初のウィンドウはすぐにメッセージを受信して​​印刷します。
redisにはパブリッシュおよびサブスクライブ機能がありますが、別の問題が存在します。つまり、コンシューマーエンドがサブスクライブした後、またはサブスクリプションがオンのときにメッセージが受信されます。クライアントが切断した場合、再接続後に再サブスクライブされたメッセージを受信した後も、切断プロセス中のメッセージは失われます。

期限切れ

redisは永続的に保存できますが、実際にはほとんどの場合キャッシュとして使用されます。キャッシュは一時的なストレージでもあります。この点で、redisはタイムアウトを設定するという非常に便利な機能を提供します。
タイムアウトを設定するには、2つの方法があります。1つは、値を設定するときにタイムアウト時間を設定する方法です。この方法は文字列タイプにのみ適用されます。他のタイプの操作にはそのようなオプションはありません。
もう1つは、expire関数を使用して、timeoutに設定する必要のあるキーのタイムアウトを設定することです。
文字列型のデータがタイムアウト時間を直接設定する場合、2つのオプションパラメータがあります。1つはexもう1つでpx、exは秒を表し、pxはミリ秒を表します。次に例を示します。

set k1 111 ex 2000

上記の操作では、k1が2000秒だけredisで保存されますが、以下の操作では2秒しか保存されません。

set k2 111 px 2000

ただし、一般的な期限切れの場合、ミリ秒のパラメータはサポートされていません。後者は秒単位でのみ可能です。次に例を示します。

expire k1 2000

ここで、2000は2000秒を表し、2000ミリ秒ではありません。
redisタイムアウトの重要な機能は、データベースのIO操作を減らすことであり、メモリリソースの問題のため、通常のキャッシュはホットデータであり、頻繁に使用されるデータはホットデータであることに注意してください。
したがって、頻繁に読み取られるデータは自動的にタイムアウト期間を延長すると考える人もいますが、実際にデータを読み取っても変更の有効期限は延長されません。
データが書き換えられると、有効期限が変更されます。有効期限を再度指定すると、新しい有効期限になります。新しい有効期限を指定しないと、redisサービスがダウンするまで永続的になります。また、データの計算によって有効期限は変更されません。

ブルームフィルター

上記のように、redisの主な役割はホットデータをキャッシュし、データベースの頻繁なIOを削減することです。これはデータベースの前のバリアに相当し、システムの全体的なパフォーマンスと可用性を向上させます。
したがって、多くの実際のビジネスでは、ビジネスの整合性と信頼性を保証するためにキャッシュが見つからない場合にデータベースをチェックするロジックがあります。
ただし、この方法では、redisキャッシュも実際のデータベースもありません。このシナリオは、redisキャッシュペネトレーションと呼ばれます。このような要求が多数ある場合、データベースで問題が発生していると考えられます。ブルームフィルターは、キャッシュ浸透の問題をある程度まで解決できます。
ブルームフィルターはredisの基本的な機能ではなく、追加のモジュールです。これを使用する場合は、まずダウンロードしてハングアップする必要があります。一般的な手順は次のとおりです。

wget https://github.com/RedisBloom/RedisBloom/archive/master.zip
unzip master.zip
make
redis-server --loadmodule /opt/soft/rdisbloom.so

言うまでもなく、上記の最初の行はLinuxの基本的なwgetダウンロードです。zipファイルを解凍する2番目のステップは言う必要はありません。3番目のステップはソースコードをコンパイルすることです。
4番目のステップが鍵です。これは、redisサービスを開始するときのブルームフィルターです。注意:soの後ろのファイルはmakeによって生成されます。特定のパスは状況によって異なり、絶対パスを書き込む必要があります。
もちろん、このコンテンツはredis構成ファイルでも構成できるため、起動するたびに手動で構成する必要はありません。
以上の操作で、あなたはすなわち、3つの主要な操作があります。ブルームフィルタを使用することができbf.addbf.existsそしてbf.reserve。追加の役割は、フィルタにコンテンツを追加することである。存在、それが存在するかどうかを決定するために使用され、および準備金は、エラーレートを設定することができます。また、見積容量はカスタムの方法で処理されます。例は次のとおりです。

bf.add filter1 111
bf.exists filter1 111
bf.reserve filter2  0.01 100

上記のfilter1とfilter2は、フィルターの名前として理解できます。を使用して決定する場合、一部のフィルターは1を返し、ない場合は0を返します
。予約には、フィルター名に加えて、エラー率も必要です。 、推定容量、エラー率が低いほど、消費されるストレージスペースが大きくなり、実際のデータが推定容量を超えると、誤検知率が増加します。
また、reserveは、まだ存在しないフィルターでのみ使用できることに注意してください。この操作を既存のフィルターで実行すると、例外がスローされます。
ブルームフィルターの基になるストレージは、ビットマップのようなバイトビットストレージを使用します。同じビットを複数のデータが占有している可能性があり、これも特定の誤判断率につながります。誤判断の結果は次のとおりです:ブルームフィルターは存在しない特定の数を返します。存在しない場合、ブルームフィルターは必ずしも存在しない存在に戻ります。
ブルームフィルターのデータストレージは、スペースを共通化してストレージスペースを大幅に節約します。ただし、共有も行われるため、フィルター内の要素の削除が禁止されます。そのため、ブルーム心配者は要素の削除操作を見つけることができません。オンラインによるとカッコウフィルターはこの種の問題を処理できると言われているので、ここで一時的に展開を停止します。

関連記事

キャッシュとredisに関連する基本的な知識
Linux redisのインストールとソフトウェアのインストールに関連するLinuxの知識ポイント
redisデータ型の主要な知識とアプリケーションシナリオ
redisパイプライン、トランザクション、パブリッシュとサブスクライブ、有効期限、フィルター、その他の一般的な高度な機能(パート1)
redisパイプライン、トランザクション、パブリッシュとサブスクライブ、有効期限、フィルターなどの一般的に使用される高度な機能の簡単なメモ(パート2)
Springbootの統合とredisの一般的な機能の使用

おすすめ

転載: blog.csdn.net/tuzongxun/article/details/107686577