1
프로필에있는 조회수를 기반으로 내 홈페이지에 사용자를 표시하려고합니다. 사용자는 페이지가 매겨지고 프로필을 볼 때마다 캐시를 무효화하려고합니다.레일즈는 질의 결과 대신 캐싱 질의를 유지합니다.
내 컨트롤러 코드 :
def index
@users = Rails.cache.read(params[:page])
if [email protected]?
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")
실행 :
Rails.cache.read
를 호출 할 때 수동으로 쿼리를 보이지 않았다 콘솔을 통해
User.paginate
값을 캐시
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
:
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
왜 컨트롤러 코드가 결과 대신 쿼리를 캐싱하는지 잘 모르겠습니다. 모든 조언을 크게 주시면 감사하겠습니다.
감사합니다. '.all'을 사용하면 문제가 해결됩니다. ActiveRecord가 게으르다는 것을 몰랐습니다. – user1650177