Tải DB trên trang web của tôi đang thực sự cao nên đã đến lúc tôi lưu trữ các truy vấn phổ biến được gọi là 1000 lần mỗi giờ mà kết quả không thay đổi. Vì vậy, ví dụ về mô hình thành phố của tôi, tôi làm như sau:Rails Caching DB Truy vấn và thực tiễn tốt nhất
def self.fetch(id)
Rails.cache.fetch("city_#{id}") { City.find(id) }
end
def after_save
Rails.cache.delete("city_#{self.id}")
end
def after_destroy
Rails.cache.delete("city_#{self.id}")
end
Vì vậy, bây giờ khi tôi có thể City.find (1) lần đầu tiên tôi nhấn DB nhưng 1000 lần tiếp theo tôi nhận được kết quả từ bộ nhớ. Tuyệt quá. Nhưng hầu hết các cuộc gọi đến thành phố không phải là City.find (1) nhưng @ user.city.name nơi Rails không sử dụng tìm nạp nhưng truy vấn DB một lần nữa ... điều đó có ý nghĩa nhưng không chính xác những gì tôi muốn nó làm.
Tôi có thể làm City.find (@ user.city_id) nhưng điều đó thật xấu.
Vì vậy, câu hỏi của tôi dành cho các bạn. Những người thông minh đang làm gì? cách phù hợp để thực hiện điều này là gì?
memoization chỉ kết thúc tốt đẹp Rails.cache. Tôi không nghĩ rằng nó sẽ giúp mô hình hiệp hội như bạn đang tìm kiếm. – Bill
Bản ghi nhớ không bao gồm bộ đệm Rails. Rails.cache thường là một kho lưu trữ cache được chia sẻ giữa các tiến trình (như vậy bạn thực sự có được các lợi ích bộ nhớ đệm). Việc ghi nhớ chỉ xảy ra trong quá trình hiện tại. – Michael