railsで重複送信を防ぐ調査の知見
採用
Rails.cacheを使用
[Rails.cacheについて 酒と涙とRubyとRailsと](https://morizyun.github.io/ruby/rails-function-cache-fetch-write-delete.html)
始めは下記で実装しようとしたが、上記で良さそう(細かなメソッドは使用できないけど) petergoldstein/dalli: High performance memcached client for Ruby
config.cache_store = :dalli_store, 'localhost:21211'
Rails.cache.dalli.with do |client| # client is a Dalli::Client instance which you can # use ONLY within this block end 内部的にはmemcachedを使用します。
メモリの解放は、 Least Recently Used というサイクルで自動で行なってくれる。
memcached - a distributed memory object caching system
調査
memcachedのcas
【Ruby】【キャッシュ】dalli(memcachedのクライアントgem)を使ってみました - blog.waterlow.work
同時書き込みさせて、falseだった方をエラーにすれば実装できそう?
multithreading - Is Memcached get and put methods are thread safe - Stack Overflow にて、値の保証はされていると記載されているが、その元のドキュメントのURLが閲覧できない。。。
Memcached Example も処理が終わるまで待機(ループ)されるようだ。 ちなみに、 $cas はどこからきた?
redisのsetnx
exist -> set を一連で行なってくれると思われる。 multithreading - Redis is single-threaded, then how does it do concurrent I/O? - Stack Overflow より、redisは、 シングルスレッド らしいのでスレッド障害を考えなくてよいっぽい。 ただ今回は、memcachedなのでメモ。
This post is licensed under CC BY 4.0 by the author.