Computer >> Máy Tính >  >> Lập trình >> Ruby

Kho lưu trữ bộ nhớ cache tích hợp sẵn của Rails:tổng quan

Khi tạo một ứng dụng Rails mới, bộ nhớ đệm đã được thiết lập. Điều này làm cho việc bắt đầu nhanh chóng như gói một số phân đoạn chế độ xem bằng cách sử dụng cache người trợ giúp hoặc sử dụng Rails.cache.fetch để lưu trữ các kết quả API bên ngoài. Dữ liệu đã lưu trong bộ nhớ cache được lưu trữ trong một trong các kho lưu trữ bộ nhớ cache của Rails, có thể giữ dữ liệu trong bộ nhớ, Memcached, Redis hoặc thậm chí ghi thẳng vào đĩa.

Nhưng các bộ nhớ cache lưu trữ khác nhau là tốt nhất cho tình huống nào? Trong phần tổng quan này, chúng ta sẽ xem xét từng tùy chọn.

👋 Và nếu bạn thích bài viết này, chúng tôi đã viết nhiều hơn về hiệu suất của Ruby (trên Rails), hãy xem danh sách kiểm tra giám sát hiệu suất Ruby của chúng tôi.

Lưu trữ tệp

:file_store được sử dụng theo mặc định khi không có bộ nhớ cache nào được định cấu hình cụ thể. Như tên của nó, nó ghi các mục trong bộ nhớ cache vào hệ thống tệp. Những thứ này kết thúc trong tmp/cache thư mục trong thư mục gốc của ứng dụng trừ khi bạn chọn một vị trí khác bằng cách đặt cache_store một cách rõ ràng cấu hình thành :file_store và chuyển một đường dẫn đến thư mục bạn muốn sử dụng.

config.cache_store = :file_store , "/path/to/cache/directory"

Các tệp bộ nhớ cache được lưu vào đĩa và chúng không tự động bị xóa. Điều này có nghĩa là bạn sẽ cần phải tự mình gỡ bỏ chúng để đảm bảo rằng chúng sẽ không làm đầy đĩa của bạn. Ví dụ:chạy Rails.cache.cleanup định kỳ sẽ giữ cho bộ nhớ cache của bạn không có các mục đã hết hạn.

Lưu trữ tệp rất hữu ích trong quá trình phát triển vì mỗi mục nhập được lưu trữ trong thư mục bộ đệm, cho phép bạn xóa một mục khỏi bộ đệm bằng cách xóa tệp của nó. Ví dụ:điều này hữu ích để kiểm tra tính vô hiệu của bộ nhớ cache.

Trong sản xuất, kho lưu trữ tệp hữu ích khi mỗi tiến trình máy chủ chạy trên cùng một hệ thống tệp. Mặc dù tốc độ này chậm hơn so với các kho lưu trữ trong bộ nhớ đệm dựa trên bộ nhớ, nhưng việc lưu trữ tệp có thể rất tuyệt nếu bộ nhớ cache có khả năng phát triển rất lớn.

Kho bộ nhớ

Kể từ phiên bản 5.0, Rails tự động thiết lập :memory_store trong cấu hình phát triển khi tạo một ứng dụng mới. Khi sử dụng bộ nhớ lưu trữ, dữ liệu đã lưu trong bộ nhớ đệm sẽ được lưu trong bộ nhớ trong quy trình của máy chủ web Ruby.

Vì dữ liệu được lưu trong bộ nhớ trong cùng một quy trình với máy chủ web của bạn, nên bộ nhớ lưu trữ rất tốt để sử dụng trong quá trình phát triển vì nó sẽ tự động bị xóa bất cứ khi nào bạn khởi động lại máy chủ web phát triển của mình.

Theo mặc định, kho lưu trữ trong bộ nhớ sẽ sử dụng 32 megabyte, nhưng bạn có thể ghi đè điều đó bằng cách chuyển :size khi định cấu hình bộ nhớ cache.

config.cache_store = :memory_store, { size: 16.megabytes }

Khi bộ nhớ đệm đầy, các mục nhập ít được sử dụng gần đây nhất sẽ tự động bị xóa khỏi bộ đệm để nhường chỗ cho các mục nhập mới.

Có thể sử dụng bộ nhớ lưu trữ trong sản xuất (và là giải pháp nhanh nhất mà bạn có thể tìm thấy), nhưng không được khuyến nghị cho các hệ thống chạy nhiều quy trình máy chủ. Vì các quá trình không thể truy cập vào bộ nhớ đệm của nhau, mỗi quá trình sẽ cần phải duy trì bản sao bộ nhớ cache của riêng mình.

Cửa hàng Memcache

:mem_cache_store sử dụng đá quý Dalli và Memcached để lưu trữ các mục nhập trong bộ nhớ đệm tập trung, trong bộ nhớ.

Dữ liệu được giữ trong một quy trình riêng thay vì quy trình máy chủ Ruby. Do đó, bộ nhớ đệm sẽ không bị giảm khi ứng dụng của bạn khởi động lại mà vẫn ở trong bộ nhớ miễn là máy chủ Memcached tiếp tục chạy. Khi khởi động lại, bạn sẽ bắt đầu với một bộ nhớ cache mới.

Kho lưu trữ Memcache sẽ giả sử máy chủ bộ nhớ cache đang chạy trên localhost theo mặc định, nhưng bạn có thể chuyển một hoặc nhiều địa chỉ để sử dụng các máy chủ từ xa.

config.cache_store = :mem_cache_store, "cache-1.example.com", "cache-2.example.com"

Memcached được định cấu hình để sử dụng kích thước bộ nhớ cache tối đa là 64 MB theo mặc định, nhưng có thể được định cấu hình bằng các tùy chọn dòng lệnh hoặc trong memcached.conf tập tin. Giống như bộ nhớ lưu trữ, nó sẽ bắt đầu xóa các mục ít được sử dụng gần đây nhất khi bộ nhớ cache đạt đến kích thước tối đa.

:mem_cache_store là kho lưu trữ bộ nhớ cache chuyển đến cho môi trường sản xuất. Bằng cách sử dụng máy chủ bộ nhớ đệm trung tâm, bộ nhớ đệm có thể được chia sẻ giữa nhiều máy chủ web và thậm chí qua nhiều máy chủ khi sử dụng máy chủ bộ nhớ đệm từ xa.

Redis cache store

Rails 5.2 đã giới thiệu :redis_cache_store lưu trữ, cho phép bạn lưu trữ các mục nhập trong bộ nhớ cache trong Redis, giống như cách bạn sử dụng kho lưu trữ Memcache.

Để sử dụng Redis làm nơi lưu trữ bộ đệm Rails, hãy sử dụng bộ đệm Redis chuyên dụng được thiết lập dưới dạng LRU Bộ nhớ đệm (Được sử dụng gần đây nhất) thay vì trỏ cửa hàng vào máy chủ Redis hiện có của bạn, để đảm bảo các mục nhập được xóa khỏi cửa hàng khi nó đạt đến kích thước tối đa.

Redis store làm việc với Redis gem (bao gồm Redis ::Distributed) và Rentis, cũng như cung cấp hỗ trợ cho một số tùy chọn cấu hình, chẳng hạn như thiết lập một hoặc nhiều máy chủ từ xa.

cache_servers = %w[redis://cache-01:6379/0 redis://cache-02:6379/0]
config.cache_store = :redis_cache_store, { url: cache_servers }

Redis sẽ định kỳ ghi tập dữ liệu vào đĩa, vì vậy hầu hết dữ liệu được lưu trong bộ nhớ cache của bạn sẽ tồn tại khi máy chủ bộ nhớ cache khởi động lại. Trong quá trình phát triển, các mục đã lưu trong bộ nhớ cache có thể bị xóa khỏi bảng điều khiển bằng cách sử dụng Rails.cache.delete .

Trong quá trình sản xuất, Redis đối thủ với Memcached trong việc cung cấp kho lưu trữ bộ nhớ đệm tập trung. Mặc dù việc sử dụng nó trong các ứng dụng Rails chưa phổ biến như Memcached, nhưng cửa hàng Redis rất có thể sẽ trở thành một kho lưu trữ bộ nhớ cache Rails phổ biến trong tương lai.

Sử dụng bộ nhớ đệm nào?

Nói chung, kho lưu trữ tập tin và bộ nhớ của Rails rất tốt cho việc phát triển nhưng có thể được sử dụng trong sản xuất cho các ứng dụng nhỏ hơn khi biết và hiểu được các lưu ý của chúng. Các cửa hàng Memcached và Redis cấp sản xuất thường là lựa chọn tốt hơn cho các ứng dụng sản xuất lớn hơn, đặc biệt khi chạy nhiều máy chủ web trên nhiều máy chủ.

Phần này kết thúc tổng quan của chúng tôi về các kho lưu trữ bộ nhớ cache trong Rails. Hãy nhớ xem phần Cache store trong hướng dẫn Rails để biết thêm thông tin và các tùy chọn cấu hình cho từng store.

Bạn thích bài viết này và các bài viết trước trong loạt bài AppSignal Academy như thế nào? Chúng tôi có một số bài viết khác về bộ nhớ đệm trong Rails sắp xếp, nhưng vui lòng cho chúng tôi biết bạn muốn chúng tôi viết về điều gì (liên quan đến bộ nhớ đệm hoặc cách khác) tiếp theo!