計算にかなりの時間がかかる (~ 30 秒) キャッシュされたオブジェクトがあります。私はこのオブジェクトを 24 時間ごとに再計算します。その場合、ユーザーがたまたま同時にここにいると、タイムアウトが発生することがあります。現在キャッシュしているオブジェクトは次のように機能します。
def matrix
Rails.cache.fetch(["matrix"], expires_in: 24.hours) do
# Math
end
end
私がやりたいのは、これにバージョンを添付することです。そうすれば、別の方法でバックグラウンドで新しい「行列」を計算できます...
def rewrite_matrix
new_version = DateTime.now.to_s
Rails.cache.fetch(["matrix", new_version], expires_in: 24.hours) do
# Math
end
$matrix_version = new_version # This feels like a faux pas.
end
次に、マトリックスメソッドを次のように変更します...
def matrix
$matrix_version ||= DateTime.now.to_s
Rails.cache.fetch(["matrix", $matrix_version], expires_in: 24.hours) do
# Math
end
end
Ruby/Rails のグローバル変数について読んだことがありますが、それらに触れてはいけません。この $matrix_version 変数は、他のプロセスや他のユーザーが利用できますか? とにかく、バックグラウンドで新しいキャッシュバージョンを回避または作成し、計算と保存が完了したときにのみ使用を開始する方法についてのアイデアを望んでいました。