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なのでメモ。