1
/
5

Redis Streamsでチケット購入システム作ってみた【株式会社ライトコード】

はじめに

Redis Streamsを勉強する機会があり、
その動きの流れを見ていって、
よくあるアーティストやイベントとかのチケット一般販売(先着購入順)の
システムっぽい作りが出来そうと思ったので
勉強として簡単な流れのものを作ってみました。

Redis streamsとは

まず、Redis streamsはRedis 5.0で導入されたデータ型で、
以下のような特徴があります。

・データを時系列で持つ追記型のデータ構造
・各データは任意の複数のフィールドを持つことができる
・時間の範囲を指定して複数のデータを読むことが出来る
・データを取得しても過去のデータを残せる(揮発しない)

<Redis公式>
https://redis.io/docs/latest/develop/data-types/streams/

ここから先は、Redis Streamsの機能を、
チケットを購入する流れと交えながら説明していきます。

ざっくりシステム概要

まず、チケット購入のシステムとしてやりたいことは以下の通りです。

・販売するチケットは3枚
・チケット番号はno-001, no-002, no-003
・先着順で1人1枚ずつ購入可能
・3枚売れたらそれ以降は購入不可
・購入画面、決済画面、完了画面で表現する

今回はRedis7.2.5でやっていきます。
最初にRedis Streamsの準備をします。

XGROUP CREATE

まずはチケット管理をするStreamsを作ります。
コマンドは「XGROUP CREATE」を実行します。
このコマンドは最初の1回だけ実行します。
正常に作成されると「OK」が返ってきます。

以下の例はストリーム名を「ticket_stream」、グループ名を「mygroup」とし、
ストリーム全体を取得対象として作成した場合です。

【コマンド】

XGROUP CREATE ticket_stream mygroup 0
【結果】
OK

XREAD

XREADコマンドでstreamのデータの情報が見れます。
まだ何も入れていないので結果は(nil)が返ってきます。

【コマンド】

XREAD STREAMS ticket_stream 0
【結果】
(nil)

XADD

次にチケットの情報を3枚分投入します。
こちらはXADDコマンドで入れていきます。
正常に入れることができると、結果としてメッセージのIDが返却されます。

まずは1件分入れてみます。

【コマンド】

XADD ticket_stream * ticket_id 10001 ticket_value no-001
【結果】
"1730825420059-0"

「ticket_stream」にメッセージID="1730825420059-0"、
それのValueとして
{ticket_id=10001、ticket_value=no-001}
という配列が入ったものが設定されます。

メッセージIDは「*」で指定した場合、Unix時間(ミリ秒)で自動的に採番されます。
「-」より右側の数字は、ミリ秒単位で同じタイミングに作られた場合、
「0」、「1」とカウントアップして作られます。

「*」ではなく任意の値も設定できます。
ただし、一度設定した値より小さい数値には設定できません。

ここでもう一度XREADでストリームの中身見てみます。

【コマンド】

XREAD STREAMS ticket_stream 0
【結果】
127.0.0.1:6379> XREAD STREAMS ticket_stream 0
1) 1) "ticket_stream"
2) 1) 1) "1730825420059-0"
2) 1) "ticket_id"
2) "10001"
3) "ticket_value"
4) "no-001"

ticket_streamの中に"1730825420059-0"が出来ており、その中に設定した値が入っているのが分かります。
同じような形であと2件入れた結果は以下の通りです。

127.0.0.1:6379> XADD ticket_stream * ticket_id 10002 ticket_value no-002

"1730825771052-0"
127.0.0.1:6379> XADD ticket_stream * ticket_id 10003 ticket_value no-003
"1730825779936-0"
127.0.0.1:6379> XREAD STREAMS ticket_stream 0
1) 1) "ticket_stream"
2) 1) 1) "1730825420059-0"
2) 1) "ticket_id"
2) "10001"
3) "ticket_value"
4) "no-001"
2) 1) "1730825771052-0"
2) 1) "ticket_id"
2) "10002"
3) "ticket_value"
4) "no-002"
3) 1) "1730825779936-0"
2) 1) "ticket_id"
2) "10003"
3) "ticket_value"
4) "no-003"

購入画面と購入の処理

購入画面の画像

チケット購入の画面をこんな感じで用意しました。
購入ボタンを押せばチケットを買えるような感じです。

記事の続きは下のURLをクリック!

https://rightcode.co.jp/blogs/49637



エンジニア積極採用中です!

現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!

採用ページはこちら:https://rightcode.co.jp/recruit

社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life

社長と一杯飲みながらお話しませんか?(転職者向け)

特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!

ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

  • ライトコードの魅力を知っていただきたい!
  • 社風や文化なども知っていただきたい!
  • 技術に対して熱意のある方に入社していただきたい!

一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。

Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?
株式会社ライトコード's job postings
1 Likes
1 Likes

Weekly ranking

Show other rankings
Like Hiroyuki Choshi's Story
Let Hiroyuki Choshi's company know you're interested in their content