Đây là một điều đáng ngạc nhiên khi nói đến PHP và MySQL (tôi không chắc về các ngôn ngữ khác) - không lưu trữ nội dung vào memcached hoặc Redis thực sự nhanh hơn. Nhanh hơn nhiều. Về cơ bản, nếu bạn vừa xây dựng ứng dụng của mình và truy vấn MySQL - bạn sẽ khai thác được nhiều hơn từ nó.
Bây giờ là phần "tại sao".
InnoDB
, công cụ mặc định, là một công cụ tuyệt vời. Cụ thể, đó là quản lý bộ nhớ (cấp phát và những gì không) vượt trội hơn bất kỳ giải pháp lưu trữ bộ nhớ nào. Đó là sự thật, bạn có thể tra cứu hoặc nghe theo lời tôi - ít nhất nó sẽ hoạt động tốt như Redis.
Bây giờ điều gì sẽ xảy ra trong ứng dụng của bạn - bạn truy vấn MySQL và lưu kết quả vào bộ nhớ cache vào redis. Tuy nhiên, MySQL cũng đủ thông minh để giữ các kết quả được lưu trong bộ nhớ cache. Những gì bạn vừa làm là tạo một bộ mô tả tệp bổ sung cần thiết để kết nối với Redis. Bạn cũng đã sử dụng một số bộ nhớ (RAM) để lưu vào bộ đệm kết quả mà MySQL đã được lưu trong bộ đệm.
Đây là một phần thú vị khác - cách ưa thích để cung cấp các tập lệnh PHP là sử dụng php-fpm
- nhanh hơn nhiều so với bất kỳ mod_*
nào ra khỏi đó. Về phần cốt lõi, php-fpm
là một quá trình giám sát sinh ra các quá trình con. Chúng không tắt sau khi tập lệnh được phân phối, có nghĩa là chúng lưu vào bộ đệm các kết nối với MySQL - kết nối một lần, sử dụng nhiều lần. Về cơ bản, nếu bạn phân phát tập lệnh bằng php-fpm
, họ sẽ sử dụng lại kết nối đã được thiết lập với MySQL, có nghĩa là bạn sẽ không mở và đóng kết nối cho mỗi yêu cầu - điều này cực kỳ thân thiện với tài nguyên và nó cho phép bạn có kết nối nhanh như chớp với MySQL. MySQL, tiết kiệm bộ nhớ và có kết quả được lưu trong bộ nhớ cache nhanh hơn nhiều so với Redis.
Bây giờ tất cả những điều này có ý nghĩa gì đối với bạn - có một thiết lập phù hợp cho phép bạn có mã nhỏ đơn giản, dễ dàng, không liên quan đến Redis và loại bỏ tất cả các vấn đề mà bạn có thể gặp phải với việc vô hiệu hóa bộ nhớ cache và những gì không và bạn sẽ không lãng phí bộ nhớ của bạn để chứa cùng một dữ liệu hai lần.
Các thành phần bạn cần để làm việc này:
-
php-fpm
-
MySQL
vàInnoDB
dựa trên bảng và hơn hết - đủ RAM và được tinh chỉnhinnodb_buffer_pool_size
Biến đổi. Điều đó kiểm soát lượng RAM mà InnoDB được phép phân bổ cho các mục đích của nó - càng lớn càng tốt.
Bạn đã loại Redis khỏi trò chơi, bạn giữ cho mã của mình đơn giản và dễ bảo trì, bạn không trùng lặp dữ liệu, bạn không giới thiệu hệ thống bổ sung cho trò chơi và bạn để phần mềm quản lý dữ liệu thực hiện công việc của nó. Đánh đổi khá rẻ để có được tính hữu ích tối đa, ngay cả khi bạn biên dịch tất cả phần mềm từ đầu - sẽ không mất hơn một giờ hoặc lâu hơn để thiết lập và chạy nó.
Hoặc, bạn có thể bỏ qua những gì tôi đã viết và tìm kiếm giải pháp bằng cách sử dụng Redis.