目次
SQL を使用して単純な分散ロックを実装する
1. 方法 1: セッション ロック
PostgreSQLでは以下の方法で実装できます
ホームページ バックエンド開発 PHPチュートリアル SQL_PHP チュートリアルを使用した単純な分散ロックの実装

SQL_PHP チュートリアルを使用した単純な分散ロックの実装

Jul 12, 2016 am 08:55 AM
android

SQL を使用して単純な分散ロックを実装する

分散ロックと通常のロックの主な違いは、参加するサブジェクトが異なるノードにまたがるため、ノード障害とネットワーク障害を考慮する必要があることです。問題の重要なポイントを理解するには、Redis、ZooKeeper など、さまざまなものを使用して問題を実装できます。ただし、実際には SQL を使用して実装するのは非常に簡単です。以下では、例として PostgreSQL を使用して説明します。

1. 方法 1: セッション ロック

PostgreSQL で独自の排他的セッション レベルの勧告ロックを使用します。
pg_advisory_lock(key bigint)
pg_advisory_unlock(key bigint)
pg_try_advisory_lock(key bigint)

詳細なリファレンス: http://www.postgres.cn/docs/9.4/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS-TABLE

この種のロックはセッションレベルです。ロックを解放する前に、ロックの取得者は常にセッション、つまり接続を保持する必要があります。そうでない場合、ロックは解放されます。
この機能は、ロック取得者が失敗した場合のロック解放の問題を自然に解決します。
ただし、長時間保持する必要があるロックの場合、長い接続が生成され、データベース接続の数が多くても、通常は数千しか必要ありません。注目されること。考慮する必要があるもう 1 つの問題は、ネットワークまたはノードに障害が発生した場合、接続の両端がそれをすぐに認識できない可能性があるため、幸いなことに、PostgreSQL クライアントとサーバーの両方がこの設定をサポートしていることです。
サーバーのパラメーターは次のとおりです:
tcp_keepalives_idle
tcp_keepalives_interval
tcp_keepalives_count


2. ロックを取得したクライアントがクラッシュしてロックが解除されるのを防ぐために、ロック オブジェクトは永続的です。解放することはできません。各ロックには有効期限があります。

PostgreSQLでは以下の方法で実装できます


テーブルを作成します


postgres=# create table distlock(id int Primary key,expired_time Interval,owner text,ts timestamptz);

  1. CREATE TABLE

  2. postgres=# distlock(id) 値に挿入します(1);

  3. INSERT 0 1
ロックと更新

postgres=# distlock set owner='node1',ts=now(),expired_time= を更新します間隔 '20 秒' where id=1 and (owner='node1' または owner is null or now() > ts +expired_time);

  1. UPDATE 1
  2. ロックを取得したクライアントが、長期間のロック 定期的に同じ方法を実行してロックを更新する必要があります。そうしないと、ロックが失われます。
この時点では、他のクライアントはロックの取得に失敗します


postgres=# update distlock set owner='node2',ts=now(),expired_time=interval '20 Second' where id=1 and (owner= 'node2 ' または所有者が null または now() > ts +expired_time);

  1. UPDATE 0
ロックの有効期限が切れると、ロックは正常に取得されます

postgres=# update distlock set owner='node2 ',ts=now (),expired_time=interval '20 Second' where id=1 and (owner='node2' または owner が null または now() > ts +expired_time);

  1. UPDATE 1
ロックを解除します

postgres=# update distlock set owner=null,ts=now() where id=1 and owner='node2';

  1. UPDATE 1
3 が配布されていることがわかります。ロックはリレーショナル データベースを使用して実装されます。これは複雑ではありません。特に、上記のテーブルベースのロックの実装と信頼性の高い HA 展開を組み合わせると、ロック情報の耐久性と損失の防止が保証されます。ただし、テーブルの更新を使用してロックを実装するのは比較的負荷が高く、非常に高いロック パフォーマンスを必要とするシナリオには適していません。 。



http://www.bkjia.com/PHPjc/1117252.html

www.bkjia.com本当http://www.bkjia.com/PHPjc/1117252.html技術記事 SQL を使用して単純な分散ロックを実装する場合、分散ロックと通常のロックの主な違いは、参加するサブジェクトが異なるノードにまたがるため、ノード障害とネットワーク障害を考慮する必要があることです。調べて聞いてください...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します 新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します Sep 12, 2024 pm 12:23 PM

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Samsung Galaxy S25 Ultraの最初のレンダリング画像がリークされ、噂のデザイン変更が明らかに Samsung Galaxy S25 Ultraの最初のレンダリング画像がリークされ、噂のデザイン変更が明らかに Sep 11, 2024 am 06:37 AM

OnLeaks は、X (旧 Twitter) のフォロワーから 4,000 ドル以上を集めようとして失敗した数日後、Android Headlines と提携して Galaxy S25 Ultra のファーストルックを提供しました。コンテキストとして、h の下に埋め込まれたレンダリング イメージ

IFA 2024 | TCLのNXTPAPER 14は、パフォーマンスではGalaxy Tab S10 Ultraに匹敵しませんが、サイズではほぼ匹敵します IFA 2024 | TCLのNXTPAPER 14は、パフォーマンスではGalaxy Tab S10 Ultraに匹敵しませんが、サイズではほぼ匹敵します Sep 07, 2024 am 06:35 AM

TCLは、2つの新しいスマートフォンの発表に加えて、NXTPAPER 14と呼ばれる新しいAndroidタブレットも発表しました。その巨大な画面サイズはセールスポイントの1つです。 NXTPAPER 14 は、TCL の代表的なブランドであるマット LCD パネルのバージョン 3.0 を搭載しています。

Vivo Y300 Pro は、7.69 mm のスリムなボディに 6,500 mAh のバッテリーを搭載 Vivo Y300 Pro は、7.69 mm のスリムなボディに 6,500 mAh のバッテリーを搭載 Sep 07, 2024 am 06:39 AM

Vivo Y300 Pro は完全に公開されたばかりで、大容量バッテリーを備えた最もスリムなミッドレンジ Android スマートフォンの 1 つです。正確に言うと、このスマートフォンの厚さはわずか 7.69 mm ですが、6,500 mAh のバッテリーを搭載しています。これは最近発売されたものと同じ容量です

Samsung Galaxy S24 FEは、4色と2つのメモリオプションで予想よりも低価格で発売されると請求されています Samsung Galaxy S24 FEは、4色と2つのメモリオプションで予想よりも低価格で発売されると請求されています Sep 12, 2024 pm 09:21 PM

サムスンは、ファンエディション(FE)スマートフォンシリーズをいつアップデートするかについて、まだ何のヒントも提供していない。現時点では、Galaxy S23 FE は 2023 年 10 月初めに発表された同社の最新版のままです。

新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します 新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します Sep 12, 2024 pm 12:22 PM

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Xiaomi Redmi Note 14 Pro Plusは、Light Hunter 800カメラを搭載した初のQualcomm Snapdragon 7s Gen 3スマートフォンとして登場します Xiaomi Redmi Note 14 Pro Plusは、Light Hunter 800カメラを搭載した初のQualcomm Snapdragon 7s Gen 3スマートフォンとして登場します Sep 27, 2024 am 06:23 AM

Redmi Note 14 Pro Plusは、昨年のRedmi Note 13 Pro Plus(Amazonで現在375ドル)の直接の後継者として正式に発表されました。予想通り、Redmi Note 14 Pro Plusは、Redmi Note 14およびRedmi Note 14 Proと並んでRedmi Note 14シリーズをリードします。李

iQOO Z9 Turbo Plus: 強化されたシリーズフラッグシップの予約開始 iQOO Z9 Turbo Plus: 強化されたシリーズフラッグシップの予約開始 Sep 10, 2024 am 06:45 AM

OnePlus の姉妹ブランドである iQOO の製品サイクルは 2023 年から 4 年で、ほぼ終わりに近づいている可能性があります。それにもかかわらず、ブランドはまだZ9シリーズの開発を終えていないと宣言しました。その最終、そしておそらく最高エンドとなる Turbo+ バリアントが、予測どおりに発表されました。 T

See all articles