Solutionテクノモバイルグループの強みServiceサービスのご紹介Informationお知らせ広報ニュース開発ブログ採用ブログ開発ブログプログラミングRailsの排他処理はRedis.setnx2019.10.28プログラミングRailsの排他処理はRedis.setnx坂東です。気楽なサービスの軽めのバッチ処理はプロジェクト内に入れちゃいますよね。それを自分のcronで叩く。バッチ処理の実装は同時に実行されるのを想定していないでしょうが、unicornや冗長化でプロセスはいっぱい立ち上がるので同時に叩いたら動いちゃいます。排他制御を入れる必要があります。私はそういう制御にRedisを使うのが好きです。ロック削除サーバーの台数が増えてcronが増えたときに、ロックをヌルっと抜けることが稀に発生するようになってきました。cronは時間ずれるように努力してるし確率でいうと0.001%くらいなんですけどね。なんらかの理由でまったく同時に実行される事があって、うまくいかないんでしょう。setnxは基本的にsetなんですけれど「キーが存在しなかったら書き込んでtrue」「キーが既にあれば書き込まずfalse」という挙動をRedisレベルで取ってくれます。いう実装になりました。