これは私が考えている解決策ですが、まだ実装されていませんが、同じ問題に直面しています。実際の有効期限を独自のキーでキャッシュします。キーは、検索URLの標準的な表現、つまり「ページ」パラメータなしのものです。例:
ユーザーはhttp://example.com?q=foo&page=3で検索します。したがって、パラメータは{ q: 'foo', page: 3 }
です。ストリップアウト "ページ= 3"と私たちは{q: 'foo'}を残しています。
これにto_param
を実行してプレフィックスを追加すると、search_expiry_q=foo
のようなキャッシュキーが残ります。
この正規のクエリのキャッシュをルックアップします。つまり、Rails.cache.read(search_expiry_q=foo
)です。存在する場合、結果は現在のところ期限切れになります。残念ながらexpires_in
ではなく、expires_at
であるため、計算を行う必要があります。つまりexpires_in: expiry_time - Time.now - 5.seconds
(5秒で競合状態が回避されることを望みます)のようなものです。この方法で完全なURL/paramsをキャッシュします。
OTOH有効期限がない場合、最近誰も検索を行っていません。だから我々はやる:
expiry_time = Time.now + 1.hour
Rails.cache.write(`search_expiry_q=foo`, expiry_time, expires_in: 1.hour)
とフルURL /パラメータ、およびexpires_inで再び、このフラグメント/ページをキャッシュ:1.hourを。
インデックスの最初のページ以外のものを除外できれば誰も次のページを見ることはないので、同じようにうまくいくのは... – rogerkk