ホームページ  >  記事  >  データベース  >  Redis は在庫の同時実行の問題をどのように解決し、数量管理を実現しますか?

Redis は在庫の同時実行の問題をどのように解決し、数量管理を実現しますか?

PHPz
PHPz転載
2023-05-29 09:52:20920ブラウズ

Redis は単一プロセスでブロック型であるため、同時に処理できるリクエストは 1 つだけであり、後続のリクエストはキューに入れて待つ必要があります。

利点: 単一プロセスであるため、同時実行の問題に対処する必要がなく、システムの複雑さが軽減されます

欠点: 大きなサイズのオブジェクト (100kb を超える) のキャッシュには適していません

理由: Redis は 1 つのコアのみを使用しますが、Memcached は複数のコアを使用できるため、各コアに少量のデータを保存する場合、平均して Redis の方が Memcached よりも高いパフォーマンスを発揮します。

100k を超えるデータでは、Memcached のパフォーマンスが Redis よりも高くなります。Redis もビッグ データの保存パフォーマンスを最適化していますが、それでも Memcached よりわずかに劣ります。

memcache はマルチプロセスでノンブロッキングです。キャッシュとしてのみ使用する場合は、memcache の方が適しています。

Redis は在庫の同時実行の問題をどのように解決し、数量管理を実現しますか?

1. コマンド

exists キー key が redis にすでに存在するかどうかを確認します。たとえば、exists mycounter

set set mycounter 99

get などのキー値を初期化します。get getmycounter などのキー値を取得します。

incr は 1 ずつ増加します。例: incrmycounter //出力結果は 100

incrby は増加値を指定します。例: incrbymycounter 2 //出力結果は 102

減少値を指定します。例: incrbymycounter -2 //出力結果は 100 です。

setnx 値が存在しない場合、値は正常に設定されます。例: setnxmycounter 99 //出力結果は 0、これは、設定が失敗し、redis に既に存在することを意味します。

setnx key1 12 //出力結果は 1 で、設定が成功し、これまで redis に存在しなかったことを示します。

expire Setキーのライフサイクル (expired など) mycounter 30 //有効期間を 30 秒に設定します

ttl キーの有効期限を取得します (ttlmycounter など) //出力 13 です。これは、残り 13 秒であることを意味します-1 が返された場合は、メモリが不足しない限り、有効期限が切れず、常に Redis キャッシュに存在することを意味します。

//-2 が返された場合、有効期限が切れており、redis がそのようなものはありません キー値は存在すると検証でき、存在しないことを意味する 0 が返されます。

2. 一般的なシナリオ

製品の購入ラッシュのため、数量を増やすことができません。管理が難しくなり、在庫が限度を超えてしまい、コストが不足してしまうのです。 (例: 在庫は 1,000 ですが、ユーザーは 2,000 個のアイテムを購入できましたが、在庫が不足しています。)

宝くじの制限には限りがあり、管理できず、お金を使いすぎました

赤い封筒を手に取る

3. フローチャートとコード

計画 1 のフローチャート:

Redis は在庫の同時実行の問題をどのように解決し、数量管理を実現しますか?

計画 2 のフローチャート:

Redis は在庫の同時実行の問題をどのように解決し、数量管理を実現しますか?

らぁぁぁぁぁぁぁ

以上がRedis は在庫の同時実行の問題をどのように解決し、数量管理を実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。