メニューを閉じる

テクノモバイルグループ

メニューを開く

2019.10.28

プログラミング

Railsの排他処理はRedis.setnx

坂東です。

気楽なサービスの軽めのバッチ処理はプロジェクト内に入れちゃいますよね。
でそれを自分のcronで叩く。

バッチ処理の実装は同時に実行されるのを想定していないでしょうが、unicornや冗長化でプロセスはいっぱい立ち上がるので同時に叩いたら動いちゃいます。
なので排他制御を入れる必要があります。

私はそういう制御にRedisを使うのが好きです。
いままでこういう実装でだいたいうまく動いていたのですが、

 

サーバーの台数が増えてcronが増えたときに、ロックをヌルっと抜けることが稀に発生するようになってきました。
cronは時間ずれるように努力してるし確率でいうと0.001%くらいなんですけどね。
なんらかの理由でまったく同時に実行される事があって、うまくいかないんでしょう。

ロックを厳密にする工夫しようかなと思ってたところ、Redis.setnx に出会いました。

 

setnxは基本的にsetなんですけれど「キーが存在しなかったら書き込んでtrue」「キーが既にあれば書き込まずfalse」という挙動をRedisレベルで取ってくれます。

でこういう実装になりました。

 

スッキリ。

おわり。

 

 


【テクノモバイルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』
https://qangaroo.jp/

最近の記事

SNS共有

X CLOSE
X CLOSE
X CLOSE