1. はじめに注文書の作成などのビジネス開発では、データが複数回挿入されるのを防ぐために、注文がデータベースに書き込まれるようにするために、通常、単一のスレッドが必要です。 最近はコンテナが2つあります。プログラムの実行中は、複数の通知が送信されます。次に、同時に 1 つのプロセス (1 つのコンテナー) のみが実行されるようにする必要があります。現時点では、この問題を解決するために分散ロックが使用されます。 この問題に対する解決策は業界内に数多く存在し、ここでは Redis 分散ロックを使用して解決します。 簡単に言えば、golang redis ライブラリを使用して次のソリューションを実装できます。 2. Redis分散ロックの実装2.1 setnx+期限切れ setnx key value は、キーを値に設定します。キーが存在しない場合にのみ成功します。キーが存在する場合は何も実行されません。成功した場合は 1 を返し、失敗した場合は 0 を返します。 SETNX は実際には SET IF NOT Exists の略語です。
ただし、上記の 2 つの操作はアトミックではありません。最初の命令を実行した後にアプリケーションが失敗したり再起動したりしても、ロックは期限切れになりません。 2.2 Luaスクリプト アトミック性は保証できないため、Lua スクリプトの実行のアトミック性を利用し、上記の 2 つの操作を Lua スクリプトにカプセル化することでアトミック性を実現できます。
2.3 TTLで設定 Redis バージョン 2.6.12 以降では、一連のパラメータによって SET コマンドの動作を変更できます。
文字列値 value をキーに関連付けます。 キーにすでに別の値が含まれている場合、SET はタイプに関係なく古い値を上書きします。 元々有効期間 (TTL) を持つキーの場合、このキーに対して SET コマンドが正常に実行されると、このキーの元々の TTL はクリアされます。
直接使用すると、次のような問題が発生する可能性があります。
たとえば、スレッド A がロックを正常に取得し、有効期限を 30 秒に設定しても、スレッド A の実行時間が 30 秒を超えると、ロックは期限切れになり、自動的に解放されます。このとき、スレッド B がロックを取得し、スレッド A と B が同時に実行されます。 スレッド A と B 間の同時実行は明らかに許可されません。この問題を解決するには、一般的に 2 つの方法があります。 解決策: 1) 有効期限前にコードがリリースされていることを確認します。 2) ロックを取得するスレッドにデーモン スレッドを追加し、期限が切れそうでまだ解放されていないロックの有効時間を長くします。 ロックは別のスレッドによって誤って削除されました。 たとえば、スレッド A がロックを正常に取得し、有効期限を 30 秒に設定しても、スレッド A の実行時間が 30 秒を超えると、ロックは期限切れになり、自動的に解放されます。このとき、スレッド B がロックを取得します。 A が実行された後、スレッド A は DEL コマンドを使用してロックを解除します。ただし、スレッド B によって取得されたロックはまだ実行されていません。スレッド A は、実際にはスレッド B によって取得されたロックを解放します。 解決策は、値に現在のスレッドのロック フラグを設定し、キーを削除する前にキーに対応する値を検証して、現在のスレッドによってロックが保持されているかどうかを判断することです。 UUID を生成して現在のスレッドを識別し、Lua スクリプトを使用して識別を検証し、操作のロックを解除することができます。 研究記事: https://xiaomi-info.github.io/2019/12/17/redis-distributed-lock/ https://zhuanlan.zhihu.com/p/115848078 |
<<: VMware は、企業のデジタル変革を実現する 3 つの主要戦略と多様な製品により、エンタープライズ クラウド イノベーションを推進しています。
>>: クラウドへの移行コストが急増しており、クラウド コンピューティング料金を改革する時期が来ています。
CrownCloud は最近設立された VPS ベンダーです。openvz と KVM をベースにし...
今日のインターネットの新しい状況の下で、さまざまな業界で革新の優位性を持つ多くの新興企業が出現しまし...
最近、「元福道がダウンジャケットを作る」「元福道が新ブランドを立ち上げる」などのニュースがインターネ...
ASO最適化とは、アプリケーション市場のキーワードランキング検索最適化を指します。アプリケーション市...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です効率を追求する企業では、価値を生...
最近、いくつかの SEO フォーラムを閲覧していたのですが、投稿を読んでいると、一部の SEO 担当...
最近、あるウェブマスターとチャットをしました。彼のウェブサイトの1つは、約3年間オンラインになってい...
私たちはスマートデバイスに囲まれて暮らしています。ただし、電子メールにアクセスしたり、コンテンツのス...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス王仔ミルクが人気です!こ...
新浪科技報、北京時間12月17日朝のニュースによると、中国人民銀行の最新の規制要求の影響を受けて、ビ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeiboプロモーション...
[51CTO.com クイック翻訳]あなたのコンテナは今何をしていますか?あなたは知っていますか?ど...
最適化に携わる人なら、コンテンツは王様、外部リンクは女王という格言を知っているでしょう。これは外部リ...
Baidu のポリシーは絶えず調整されており、ますます高品質のオリジナル コンテンツに傾倒しています...
1. 電子商取引は「ダブル12」で再び苦戦、小売業者は売上に楽観的ではない電子商取引業界は今、201...