Redis ロックを使用して同時実行の問題を処理し、複数のプロセスのうち 1 つのインスタンスだけが実行されるようにします。実行中のインスタンスがダウンしても、他のインスタンスの 1 つが起動して、実行中のインスタンスが存在するだけです。
import redis r = redis.Redis(...) last_heart = 0 # 记录上一次得到的锁心跳 free_lock_try = 6 # 锁无心跳的最大次数 while not r.setnx('mylock', 1): now_heart = r.get('mylock') print(f"没获取到锁,now_heart={now_heart},last_heart={last_heart},free_lock_try={free_lock_try}") if now_heart == last_heart: free_lock_try = free_lock_try - 1 if free_lock_try == 0: # 锁已经1分钟没有心跳了 old_heart = r.getset('mylock', 1) # 将lock重置为1,并返回set之前的心跳值 if old_heart < now_heart: time.sleep(10) continue else: break # 成功获取到锁,退出循环 else: free_lock_try = 6 # 锁有心跳,重置free_lock_try值 last_heart = now_heart time.sleep(10) def producer_exit(): """程序正常退出时候自动清理锁""" r.delete('mylock') import atexit atexit.register(producer_exit) # 业务代码 while True: r.incr('mylock') # 让锁心跳加一 ...
このプログラムが同時ロックでどのような問題を解決するかを見てみましょう:
1. 同時実行性が高い場合、複数のプロセスが同時にロックを取得できません。ここでは Redis.setnx を使用します。ロックが既に存在する場合、他のプロセスはロックをリセットしてロックを取得できません。さらに、複数のプロセスが同時にロックがありハートビートがないことを検出すると、redis.getset を使用してハートビートを 1 にリセットします。設定は成功する可能性がありますが、複数のプロセスによって取得される値は異なります。実際にロックが取得され、プロセスは前のプロセスのハートビートを返し、他のプロセスは 1 を取得します。
2. ロックのあるプロセスは正常に終了します。atexit を使用して、ロックを削除するプロセス終了関数を登録できます。ここで行う必要はありませんが、新しいロックを待つ必要があります。
3. ロックされたプロセスが予期せず終了し、終了後にハートビートが増加しなくなります。free_lock_try の数を超えると、他のプロセスがリセットして、ロックされたプロセスを取得します。 lock
4. すべてのプロセスが予期せず終了します。この問題はロックには関係ありません。スーパバイザを使用してデーモン プロセスを実行できます。
redis の詳細については、redis 入門チュートリアル 列に注目してください。
以上がRedis ロックを使用して同時実行の問題に対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。

redisisclassifiedsaNosqldatabasebasesakey-valuedataModelinsteaded ofthetraditionaldatabasemodel.itoffersspeedand andffficability、makingidealforreal-timeaplications andcaching、butmaynotbesbesutable fors cenariois requiring datientiantientioniity

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

Redisのデータモデルと構造には、5つの主要なタイプが含まれます。1。文字列:テキストまたはバイナリデータの保存に使用され、原子操作をサポートします。 2。リスト:キューとスタックに適した注文された要素コレクション。 3.セット:順序付けられていない一意の要素セット、セット操作をサポートします。 4。注文セット(sortedset):ランキングに適したスコアを持つ一意の要素セット。 5。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。

Redisのデータベースメソッドには、メモリ内データベースとキー価値ストレージが含まれます。 1)Redisはデータをメモリに保存し、速く読み取り、書き込みます。 2)キー価値のペアを使用してデータを保存し、キャッシュやNOSQLデータベースに適したリスト、コレクション、ハッシュテーブル、注文コレクションなどの複雑なデータ構造をサポートします。

Redisは、高速パフォーマンス、リッチデータ構造、高可用性とスケーラビリティ、持続性能力、幅広いエコシステムサポートを提供するため、強力なデータベースソリューションです。 1)非常に速いパフォーマンス:Redisのデータはメモリに保存され、非常に速い読み取り速度と書き込み速度が高く、高い並行性と低レイテンシアプリケーションに適しています。 2)豊富なデータ構造:さまざまなシナリオに適したリスト、コレクションなど、複数のデータ型をサポートします。 3)高可用性とスケーラビリティ:マスタースレーブの複製とクラスターモードをサポートして、高可用性と水平スケーラビリティを実現します。 4)持続性とデータセキュリティ:データの整合性と信頼性を確保するために、データの持続性がRDBとAOFを通じて達成されます。 5)幅広い生態系とコミュニティのサポート:巨大なエコシステムとアクティブなコミュニティにより、

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
