ホームページ >バックエンド開発 >PHPチュートリアル >同時実行性が高い場合、http リクエストは現在のリクエストの絶対数を返すにはどうすればよいでしょうか?
たとえば、私の最初のアクセスリクエストは次の json を返しました: {"n": 1}
100 回目のアクセスリクエストで json が返されました: {"n": 100}
データベースに書き込んでからデータベースをチェックして結果を返すという従来の方法は、同時実行性が大きい場合は保証されないようです。どうすればよいですか?これが最も単純な質問になるはずです
たとえば、私の最初のアクセスリクエストは次の json を返しました: {"n": 1}
100 回目のアクセスリクエストで json が返されました: {"n": 100}
データベースに書き込んでからデータベースをチェックして結果を返すという従来の方法は、同時実行性が大きい場合には保証されないようです。どうすればよいですか?これが最も単純な質問になるはずです
最も簡単な方法は、自動インクリメントされる ID の主キーを使用して mysql テーブルを構築し、リクエストごとにレコードを挿入し、読み取られた ID が必要な値を読み取ることです。
その後、ID 値に基づいて同時実行性の高いシナリオを簡単に処理できます。たとえば、[インスタント キル] では、ID が 300 未満で 6 で割り切れるというルールを使用して、インスタント キルが成功したと見なすことができます。 ID が 300 未満で 6 で割り切れるルール、[宝くじ] は ID が 100 (100 分の 1) で割り切れるルールを当選として使用できます。
自分で実装した場合、ソケットリクエストを処理し、グローバル変数を維持するシングルスレッドの無限ループにすぎません。既製の mysql を使用するほど便利ではなく、信頼性も高くありません。
修正であれば、他の言語であっても、ほぼ同じですjava
的话,一个全局的AtomicLong
可以满足你的需求吧,getAndIncrement
原子操作,再加上volatile
redis で setnx(id) を使用すると、単一スレッドで毎回 1 ずつ増加することが保証され、またインメモリ データベースであるため、超高速です。
純粋な Java では、カウンター オブジェクトをシングルトンにして、
を介してデータベースから取得できますか? filter
拦截所有请求计算器加1(需要同步)。不知道你说的数据库是什么意思,{n : 100}
,n
実際、あなたがやりたいのは、リクエストに従ってキューに入れられ、処理される永続的なメモリキューです。
単一のマシン上で、Linux メモリファイルシステム上の /dev/shm で SQLite の読み取りと書き込みを試すことができます。 tmpfs)
ファイルの読み取りにはネットワークを経由する必要がなく、メモリ常駐、ロック、自動インクリメント、および一意の制約を自分で実装する必要もありません。
リーリー