2013-04-29 24 views
5

Tôi đang làm việc với bộ nhớ cache trong dự án Rails của mình và muốn hết hạn bộ nhớ cache của một url cụ thể. Tôi nhận được lệnh sau để hết hạn đoạn tương ứng với URL được chuyển:Rails hết hạn bộ nhớ cache phân đoạn từ các mô hình

ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/") 

Tôi đang bối rối nơi để đặt mã này trong dự án Rails của tôi vì vậy mà nó được thực hiện càng sớm càng url trong một lĩnh vực văn bản được thêm vào và nút hết hạn được nhấp.

Trả lời

3

ActionController::Caching::Sweeper là cách hay để làm điều này, một phần của người quan sát Rails.

http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

class MyModelSweeper < ActionController::Caching::Sweeper 
    observe MyModel 

    def after_save(object) 
    expire_fragment('...') 
    end 
end 
+0

Tôi không muốn một người quan sát trong mô hình. Tôi đã thực hiện các trình quét trong dự án của mình. Nhưng điều này khi bạn muốn hết hạn bộ nhớ cache nếu url mà không xóa cahe hoàn chỉnh. Người giúp việc có đúng chỗ không? –

7

Bạn có lẽ nên xem xét một cách tiếp cận khác nhau. Các mô hình không nên quan tâm đến cách hoạt động của bộ nhớ đệm và theo truyền thống, toàn bộ phương pháp quét toàn bộ có xu hướng trở nên phức tạp, khó sử dụng và không đồng bộ với phần còn lại của mã.

Về cơ bản, bạn không bao giờ phải hết hạn theo cách thủ công. Thay vào đó, bạn thay đổi khóa/url bộ nhớ cache của mình khi mô hình của bạn được cập nhật (để bạn có một mục nhập bộ nhớ cache mới cho phiên bản mới).

Sự khôn ngoan thông thường hiện nay là sử dụng phương pháp Russian Doll Caching. Liên kết đi tới một bài viết giải thích các khái niệm cơ bản và Rails 4 will contain even better support sắp tới.

Đây có lẽ là cách tốt nhất để sử dụng cho phần lớn các ứng dụng Rails tiêu chuẩn.

Các vấn đề liên quan