戦国炎舞の事例で学ぶRedisコマンド

こんにちは、サーバエンジニアのNです。
key valueストアとして有名なRedisですが戦国炎舞でも様々な場面で利用していますので、今回は、実際の用途とともにコマンドの紹介をします。
 
#ZADD

zadd
 

ZADDは、「ソート済みセット型」のコマンドです。
合戦のマッチングでは、連合の戦力、ランキング、階級のデータを元に近い連合同士でマッチングをする為に、並び替えを行った後に、マッチングを行っています。ソート済みセット型を使うことで、連合スコアを元に並び替えてくれます。
戦国炎舞では、数百万もの連合がありますが、並列で処理を行うことで、数分でソートデータを作成することが出来ます。

 

zadd2

 

#HINCRBY

hincrby

 

HINCRBYは、ハッシュ内のフィールドの数値をインクリメントする場合に利用します。合戦中は、主にコンボ数更新で使っています複数のユーザが同時に行動した場合でも、HINCRBYを利用することで最大コンボ数は、不整合を起こすことなく更新することが出来ます。

 

hincrby2

 

#LPUSH

lpush1

 

戦況履歴は、1合戦に大量の行動履歴があり時系列順にする必要がありますので、リスト型で保存しています。リストの先頭に追加するコマンドがLPUSH、末尾に追加したい場合は、RPUSHを使います。

lpush2

 

 

#SETNX

setnx1

 

SETNXは、”set if not exists”の意味です。その名の通り、キーが存在しなければ処理を行い、キーが存在すれば処理が行われません。これを利用して合戦中のロックを実装しています。成功(return1)時のみ、処理を実行し、

他は、待ちもしくは、すでに実行済みで返します。

setnx2

 

いくつか紹介してきましたが、Redisは、アトミックな動作が保証されているので、戦国炎舞の様な、同時に複数人で複数の処理が走るようなアプリケーションには、とても使い勝手がいいです。

他にも戦国炎舞では、多くの場面で使用していますのでまた機会があれば、書きたいと思います。

 

株式会社Sumzap 採用情報

 

 

  • このエントリーをはてなブックマークに追加