redis処理オーダーの期限切れ自動キャンセル

1544 ワード

会社のショッピングモールのプロジェクトの中の1つの注文が期限切れになって自動的にキャンセルする問題、前に類似のプロジェクトをしたことがなくて、ネット上で関連する資料を探します

1.redisのキースペース通知(keyspace notifications)


redisが2.8バージョン後にリリースした機能の一つですが、現在はほとんどの会社がこのバージョン以上を使っているのではないでしょうか.
この機能はデフォルトではオンになっていません.オンにするにはconfig set notify-keyspace-events Exを設定する必要があります.
設定可能なパラメータ
K:keyspaceイベント、イベントは_keyspace@__プレフィックスのパブリッシュ
E:keyeventイベント、イベントは_keyevent@__プレフィックスのパブリッシュ
g:一般的な、del、expire、renameなどの非特定のタイプのコマンド;
$:文字列固有のコマンド;
l:リスト固有コマンド;
s:集合特定コマンド;
h:ハッシュ特定コマンド;
z:秩序化集合特定コマンド;
x:キーが期限切れになって削除されたときに発生する期限切れイベント.
e:maxmemoreポリシーによってキーが削除された場合に発生するイベントを駆逐する.
A:g$lshzxeの別名であるため、「AKE」はすべてのイベントを意味する.
期限切れ通知類似のタイミングタスクが必要なのでExを設定すれば良いのですが、
redis-cliはredis実行に入ります
psubscribe __keyevent@0__:expired

0番データを購読するすべての期限切れ通知
SETEX order_9299292 10 99988 

10秒の期限切れを設定し、デフォルトでは0番のライブラリを使用します.
PHPで実現しました
上の原理を理解して、実現は簡単で、PHPのreidsの拡張の方法はredisの命令とほとんど差がありません.
psubscribe(['__keyevent@1__:expired'],'psCallback');

主にこの方法で、後のpsCallbackは期限切れのコールバック方法で、論理はすべて中で処理します.
ネット上には多くの関連するチュートリアルがあり、一度やったらここで記録します.間違いがあります.お兄さん、よろしくお願いします.

2、タイミングタスク


主に次の文章を見ました.
詳細はこちら
この方法は私が実現していません.最初の簡単で便利で、効率がいいと思います.
2つの方法の長所と短所がよく分からないので、知っているお兄さんが教えてくれて、感謝に堪えません.