採用

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が閲覧できない。。。

redisまたはmemcachedを使用して、PHP同時実行でロック制御を実装します - コードチュートリアル

Memcached Example も処理が終わるまで待機(ループ)されるようだ。 ちなみに、 $cas はどこからきた?

redisのsetnx

SETNX Redis

exist -> set を一連で行なってくれると思われる。 multithreading - Redis is single-threaded, then how does it do concurrent I/O? - Stack Overflow より、redisは、 シングルスレッド らしいのでスレッド障害を考えなくてよいっぽい。 ただ今回は、memcachedなのでメモ。