SQL_PHP チュートリアルを使用した単純な分散ロックの実装
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);
-
CREATE TABLE -
postgres=# distlock(id) 値に挿入します(1); -
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);
-
UPDATE 1 - ロックを取得したクライアントが、長期間のロック 定期的に同じ方法を実行してロックを更新する必要があります。そうしないと、ロックが失われます。
postgres=# update distlock set owner='node2',ts=now(),expired_time=interval '20 Second' where id=1 and (owner= 'node2 ' または所有者が null または now() > ts +expired_time);
-
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);
-
UPDATE 1
postgres=# update distlock set owner=null,ts=now() where id=1 and owner='node2';
-
UPDATE 1
http://www.bkjia.com/PHPjc/1117252.html

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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シリーズをリードします。李

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