プロファイルのビュー数に基づいてホームページにユーザーをリストしようとしています。ユーザーはページ分割されており、ユーザーをキャッシュして、プロファイルが新しいビューを取得するたびにそのキャッシュを無効にしようとしています。
私のコントローラーコード:
def index
@users = Rails.cache.read(params[:page])
if !@users.nil?
flash[:info] = "Cache was hit."
else
flash[:info] = "Miss."
@users = User.paginate(page: params[:page], per_page: 5, order: "views DESC")
Rails.cache.write(params[:page], @users)
end
end
最初にページ 2 に移動すると、予想どおりキャッシュ ミスが発生し、更新すると、やはり予想どおりキャッシュ ヒットが発生します。ただし、コンソールを介して手動でユーザーを変更し、views
ページ 2 を更新すると、ページがキャッシュからレンダリングされるはずだったにもかかわらず、コンソールで行った変更がページに影響を与えました。上部の通知には、「キャッシュがヒットしました」と記載されていました。
コンソールで実行Rails.cache.read("2")
して、コントローラーがキャッシュしたものを取得すると、次のようになりました。
User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY views DESC LIMIT 5 OFFSET 0
(0.2ms) SELECT COUNT(*) FROM "users"
=> users freshly pulled from the database
コンソールを介して手動でUser.paginate
値をキャッシュすると、呼び出されたときにクエリが表示されませんでしたRails.cache.read
:
test = User.paginate(page: 1, order: "views DESC")
=> users freshly pulled from the database
Rails.cache.write("9", test)
=> true
Rails.cache.read("9")
=> users from test; no queries displayed above this
コントローラー コードが結果ではなくクエリをキャッシュしている理由がわかりません。アドバイスをいただければ幸いです。