Hướng dẫn php cache data in memory - dữ liệu bộ nhớ đệm php trong bộ nhớ
Tôi đang tìm kiếm bộ nhớ cache/hashtable trong bộ nhớ nhanh nhất có sẵn cho PHP. Show
Tôi sẽ lưu trữ một số giá trị cấu hình hệ thống trong đó và tôi đang cố gắng có được chi phí thấp nhất có thể. Dữ liệu sẽ nhỏ và hạt. Bạn muốn giới thiệu gì và tại sao? hỏi ngày 5 tháng 9 năm 2011 lúc 14:19Sep 5, 2011 at 14:19
5 Nếu bạn chưa cài đặt APC hoặc Memcached (hoặc không muốn sử dụng chúng cho việc này), bạn cũng có thể tạo đĩa RAM. Sau đó, sử dụng 0 và 1 trong đó tên tệp là khóa của bạn và nội dung tệp là giá trị của bạn. Tôi không có số cho điều đó, nhưng nó sẽ nhanh.
Đã trả lời ngày 5 tháng 9 năm 2011 lúc 14:31Sep 5, 2011 at 14:31
GordongordonGordon 308K72 Huy hiệu vàng527 Huy hiệu bạc553 Huy hiệu Đồng72 gold badges527 silver badges553 bronze badges 2
Xem những người khác: http://pecl.php.net/packages.php?catpid=3&catname=caching
Nikic 99,7K36 Huy hiệu vàng188 Huy hiệu bạc224 Huy hiệu đồng36 gold badges188 silver badges224 bronze badges Đã trả lời ngày 5 tháng 9 năm 2011 lúc 14:27Sep 5, 2011 at 14:27
Arnaud le blancarnaud le blancArnaud Le Blanc 96.5K22 Huy hiệu vàng203 Huy hiệu bạc193 Huy hiệu Đồng22 gold badges203 silver badges193 bronze badges 3 Đã trả lời ngày 5 tháng 9 năm 2011 lúc 14:24Sep 5, 2011 at 14:24
Đã trả lời ngày 5 tháng 9 năm 2011 lúc 14:22Sep 5, 2011 at 14:22
Sanmaisanmaisanmai Phim thương hiệu vàng 27.5K1212 gold badges61 silver badges74 bronze badges Nếu bạn không có ý định sửa đổi dữ liệu (có thể đúng với các tệp cấu hình của bạn) thì hãy sử dụng CHDB. Đã trả lời ngày 5 tháng 9 năm 2011 lúc 14:33Sep 5, 2011 at 14:33
Karoly Horvathkaroly HorvathKaroly Horvath 92.9k11 Huy hiệu vàng113 Huy hiệu bạc173 Huy hiệu đồng11 gold badges113 silver badges173 bronze badges 1 Sự tăng trưởng của dự án và tải trọng của nó có thể là một thách thức thực sự cho nhà phát triển. Trang web bắt đầu trả lời với sự chậm trễ và câu hỏi về việc mở rộng đang được đặt ra thường xuyên hơn. Có nhiều giải pháp hiệu quả để tăng tính ổn định của dự án và khả năng tải, và một trong những giải pháp cơ bản nhất là bộ nhớ đệm. Bộ nhớ đệm là việc lưu dữ liệu ở những nơi có thể truy cập cao tạm thời để truy xuất của chúng được thực hiện nhanh hơn so với nguồn. Ví dụ phổ biến nhất về việc sử dụng bộ đệm là nhận dữ liệu từ cơ sở dữ liệu. Ví dụ, khi một sản phẩm được nhận từ cơ sở dữ liệu, nó được lưu trữ trong bộ đệm trong một thời gian nhất định, do đó, mỗi yêu cầu tiếp theo cho sản phẩm này sẽ không làm phiền cơ sở dữ liệu, vì dữ liệu sẽ được nhận từ một bộ lưu trữ khác. Các cách tiếp cận là gì?Có nhiều cách tiếp cận để lưu trữ. Bạn có thể kiểm tra danh sách các công cụ tương thích PHP trên trang PHP-CACHE. Tuy nhiên, những cái phổ biến nhất là:
Hãy xem xét sự khác biệt và tính năng của họ. ApcuMột trong những công cụ bộ nhớ đệm phổ biến và dễ kết hợp nhất. Lưu dữ liệu vào RAM (và cũng biết cách lưu trữ mã trung gian, nhưng đó là một câu chuyện hoàn toàn khác ...). Để bắt đầu với APCU, bạn cần chắc chắn rằng nó được cài đặt. Để làm điều đó, hãy chạy lệnh sau trên dòng lệnh:
Nhập chế độ FullScreenen EXIT Mode FullScreen Một cách khác để kiểm tra nó: Tạo một tệp index.php và đặt cuộc gọi chức năng 2 trong đó. Đảm bảo rằng bạn có một máy chủ web được cấu hình cho thư mục bạn đang sử dụng và mở tập lệnh trong trình duyệt thông qua địa chỉ máy chủ. Chúng tôi quan tâm đến phần APCU, nếu có hỗ trợ APCU: mục được bật bên trong nó, thì mọi thứ đều ổn, chúng tôi có thể tiếp tục.index.php and put the 2 function call in it. Make sure that you have a web server configured for the directory you are using and open the script in the browser via the server address. We are interested in the APCu section, if there is an APCu Support: Enabled item inside
it, then everything is fine, we can move on.Nếu bạn chưa cài đặt APCU, bạn có thể thực hiện theo cách sau:
Để sử dụng phương pháp lưu trữ này, chúng tôi sẽ cần các chức năng cơ bản. Dưới đây là một ví dụ về ứng dụng của họ.
Nhập chế độ FullScreenen EXIT Mode FullScreen Một cách khác để kiểm tra nó: Tạo một tệp index.php và đặt cuộc gọi chức năng 2 trong đó. Đảm bảo rằng bạn có một máy chủ web được cấu hình cho thư mục bạn đang sử dụng và mở tập lệnh trong trình duyệt thông qua địa chỉ máy chủ. Chúng tôi quan tâm đến phần APCU, nếu có hỗ trợ APCU: mục được bật bên trong nó, thì mọi thứ đều ổn, chúng tôi có thể tiếp tục.key-value storage, which means that the stored data is stored with a special key, which is accessed. In this case, the key is stored in the 4 variable.
Khởi chạy một cửa sổ đầu cuối (Linux/macOS) hoặc dấu nhắc lệnh (Windows. Nhập "CMD" trong tìm kiếm)Chạy lệnh: 3Mở tệp cấu hình php.ini thông qua bất kỳ trình soạn thảo văn bản nào và đảm bảo rằng các dòng sau có mặt: Nếu không có dòng được chỉ định, hãy thêm chúng và lưu tệp cấu hình Nhập chế độ FullScreenen EXIT Mode FullScreen Một cách khác để kiểm tra nó: Tạo một tệp index.php và đặt cuộc gọi chức năng 2 trong đó. Đảm bảo rằng bạn có một máy chủ web được cấu hình cho thư mục bạn đang sử dụng và mở tập lệnh trong trình duyệt thông qua địa chỉ máy chủ. Chúng tôi quan tâm đến phần APCU, nếu có hỗ trợ APCU: mục được bật bên trong nó, thì mọi thứ đều ổn, chúng tôi có thể tiếp tục.Nếu bạn chưa cài đặt APCU, bạn có thể thực hiện theo cách sau:Khởi chạy một cửa sổ đầu cuối (Linux/macOS) hoặc dấu nhắc lệnh (Windows. Nhập "CMD" trong tìm kiếm)
Nếu không có dòng được chỉ định, hãy thêm chúng và lưu tệp cấu hình Lặp lại séc cho APCU đã cài đặtĐể sử dụng phương pháp lưu trữ này, chúng tôi sẽ cần các chức năng cơ bản. Dưới đây là một ví dụ về ứng dụng của họ. Bất kỳ bộ đệm nào cũng hoạt động theo nguyên tắc lưu trữ giá trị khóa, có nghĩa là dữ liệu được lưu trữ được lưu trữ với một khóa đặc biệt, được truy cập. Trong trường hợp này, khóa được lưu trữ trong biến 4.
Như bạn có thể thấy, giao diện rất đơn giản và ngay cả các chức năng mà chúng tôi đã xem xét trong ví dụ cho APCU là đủ để viết dịch vụ bộ nhớ cache của bạn theo PSR-16. Nhưng tại sao nó lại cần thiết? Ưu điểm chính của việc tuân thủ các tiêu chuẩn PSR:
Hãy xem xét kỹ hơn điểm cuối cùng và lợi ích của nó. Việc sử dụng các thư viện PSR-16Các thư viện tạo "trình bao bọc" trên các công cụ bộ nhớ đệm hiện có để phù hợp với giao diện được gọi là bộ điều hợp. Ví dụ, hãy xem xét các bộ điều hợp của các phương pháp mà chúng ta đã thảo luận:
Tất cả đều thỏa mãn PSR-16 và do đó được áp dụng theo cùng một cách, nhưng mỗi người có logic riêng "dưới mui xe". Để biết ví dụ về việc sử dụng, hãy tải APCU và bộ điều hợp mảng sử dụng trình soạn thảo vào dự án của chúng tôi.APCu and array adapters using composer into our project.
Nhập chế độ FullScreenen EXIT Mode FullScreen Hãy tưởng tượng rằng chúng ta có một lớp đặc biệt để nhận sản phẩm từ cơ sở dữ liệu. Chúng ta hãy gọi nó là ProductStrepository, nó có một phương thức 6 trả về một sản phẩm bằng ID của nó và nếu không có sản phẩm như vậy, NULL.
Nhập chế độ FullScreenen EXIT Mode FullScreen Hãy tưởng tượng rằng chúng ta có một lớp đặc biệt để nhận sản phẩm từ cơ sở dữ liệu. Chúng ta hãy gọi nó là ProductStrepository, nó có một phương thức 6 trả về một sản phẩm bằng ID của nó và nếu không có sản phẩm như vậy, NULL.
Nhập chế độ FullScreenen EXIT Mode FullScreen Hãy tưởng tượng rằng chúng ta có một lớp đặc biệt để nhận sản phẩm từ cơ sở dữ liệu. Chúng ta hãy gọi nó là ProductStrepository, nó có một phương thức 6 trả về một sản phẩm bằng ID của nó và nếu không có sản phẩm như vậy, NULL.
Nhập chế độ FullScreenen EXIT Mode FullScreen Hãy tưởng tượng rằng chúng ta có một lớp đặc biệt để nhận sản phẩm từ cơ sở dữ liệu. Chúng ta hãy gọi nó là ProductStrepository, nó có một phương thức 6 trả về một sản phẩm bằng ID của nó và nếu không có sản phẩm như vậy, NULL.
Nhập chế độ FullScreenen EXIT Mode FullScreen Hãy tưởng tượng rằng chúng ta có một lớp đặc biệt để nhận sản phẩm từ cơ sở dữ liệu. Chúng ta hãy gọi nó là ProductStrepository, nó có một phương thức $cacheKey = 'product_1'; $ttl = 600; // 10 minutes. // Checking APCu availability $isEnabled = apcu_enabled(); // Checks if there is data in the cache by key $isExisted = apcu_exists($cacheKey); // Saves data to the cache. Returns true if successful // The $ttl argument determines how long the cache will be stored (seconds) $isStored = apcu_store($cacheKey, ['name' => 'Demo product'], $ttl); // Retrieves data from the cache by key. If not, returns false $data = apcu_fetch($cacheKey); // Deletes data from the cache by key $isDeleted = apcu_delete($cacheKey); var_dump([ 'is_enabled' => $isEnabled, 'is_existed' => $isExisted, 'is_stored' => $isStored, 'is_deleted' => $isDeleted, 'fetched_data' => $data, ]); 6 trả về một sản phẩm bằng ID của nó và nếu không có sản phẩm như vậy, NULL.Nếu chúng tôi muốn bật bộ đệm, chúng tôi không nên thực hiện nó bên trong kho lưu trữ, vì trách nhiệm của nó là trả lại dữ liệu từ cơ sở dữ liệu. Chúng ta sẽ thêm bộ đệm ở đâu? Có một số giải pháp phổ biến, đơn giản nhất là một lớp nhà cung cấp bổ sung. Tất cả những gì anh ta sẽ làm là cố gắng lấy dữ liệu từ bộ đệm và nếu nó không thành công, anh ta sẽ liên hệ với kho lưu trữ. Để làm điều này, chúng tôi sẽ xác định hai phụ thuộc vào hàm tạo của một lớp đó - kho lưu trữ của chúng tôi và 5. Tại sao giao diện? Bởi vì chúng tôi sẽ có thể sử dụng hoàn toàn bất kỳ bộ điều hợp nào được đề cập hoặc các lớp khác đáp ứng PSR-16.Lớp học của chúng tôi đã sẵn sàng. Bây giờ chúng ta hãy xem ứng dụng của nó kết hợp với bộ chuyển đổi APCU.
Người dùng 2 có thực thể từ bộ đệm
Người dùng 2 đã cập nhật thực thể trong cơ sở dữ liệu nhưng ghi đè lên dữ liệu cũ vì thực thể không liên quan tại thời điểm nhận và như thế...
Nhập chế độ FullScreenen EXIT Mode FullScreen Hãy tưởng tượng rằng chúng ta có một lớp đặc biệt để nhận sản phẩm từ cơ sở dữ liệu. Chúng ta hãy gọi nó là ProductStrepository, nó có một phương thức $cacheKey = 'product_1'; $ttl = 600; // 10 minutes. // Checking APCu availability $isEnabled = apcu_enabled(); // Checks if there is data in the cache by key $isExisted = apcu_exists($cacheKey); // Saves data to the cache. Returns true if successful // The $ttl argument determines how long the cache will be stored (seconds) $isStored = apcu_store($cacheKey, ['name' => 'Demo product'], $ttl); // Retrieves data from the cache by key. If not, returns false $data = apcu_fetch($cacheKey); // Deletes data from the cache by key $isDeleted = apcu_delete($cacheKey); var_dump([ 'is_enabled' => $isEnabled, 'is_existed' => $isExisted, 'is_stored' => $isStored, 'is_deleted' => $isDeleted, 'fetched_data' => $data, ]); 6 trả về một sản phẩm bằng ID của nó và nếu không có sản phẩm như vậy, NULL.Nếu chúng tôi muốn bật bộ đệm, chúng tôi không nên thực hiện nó bên trong kho lưu trữ, vì trách nhiệm của nó là trả lại dữ liệu từ cơ sở dữ liệu. Chúng ta sẽ thêm bộ đệm ở đâu? Có một số giải pháp phổ biến, đơn giản nhất là một lớp nhà cung cấp bổ sung. Tất cả những gì anh ta sẽ làm là cố gắng lấy dữ liệu từ bộ đệm và nếu nó không thành công, anh ta sẽ liên hệ với kho lưu trữ. Để làm điều này, chúng tôi sẽ xác định hai phụ thuộc vào hàm tạo của một lớp đó - kho lưu trữ của chúng tôi và 5. Tại sao giao diện? Bởi vì chúng tôi sẽ có thể sử dụng hoàn toàn bất kỳ bộ điều hợp nào được đề cập hoặc các lớp khác đáp ứng PSR-16.Lớp học của chúng tôi đã sẵn sàng. Bây giờ chúng ta hãy xem ứng dụng của nó kết hợp với bộ chuyển đổi APCU. Nếu chúng tôi muốn thay thế bộ đệm APCU bằng bộ điều hợp mảng hoặc bất kỳ cách tiếp cận nào khác, thay vào đó chúng tôi sẽ chuyển nó cho nhà cung cấp, vì tất cả đều thực hiện 5.
Làm thế nào để php lưu trữ dữ liệu trong bộ đệm?so với chúng tôi khai báo một biến của $ cache_file và kiểm tra xem tệp có tồn tại hay không. Vì vậy, ngay lần đầu tiên, điều này không tồn tại, vì vậy chúng tôi tìm nạp tất cả các bản ghi từ cơ sở dữ liệu và lưu trữ trong $ cache_file của chúng tôi bằng cách sử dụng các chức năng tệp được xác định trước.fetch all records from database and store in our $cache_file by using predefined file functions.
Bộ nhớ bộ nhớ cache trong PHP là gì?Bộ đệm là một tập hợp các dữ liệu trùng lặp, trong đó dữ liệu gốc đắt tiền để tìm nạp hoặc tính toán (thường là theo thời gian truy cập) so với bộ đệm.Trong PHP, bộ nhớ đệm được sử dụng để giảm thiểu thời gian tạo trang.a collection of duplicate data, where the original data is expensive to fetch or compute (usually in terms of access time) relative to the cache. In PHP, caching is used to minimize page generation time.
PHP có được bộ nhớ cache không?PHP tự nó không làm bộ nhớ đệm.Nhưng có các khung OpenSource để cho phép lập trình thiết kế mã của họ hoạt động theo cách này.Nói cách khác, nó cho phép kiểm tra mã nếu dữ liệu đã được truy xuất trước khi nó đi và tìm nạp lại, đây là một quá trình tương đối chậm vì nó phải truy vấn cơ sở dữ liệu.. But there are opensource frameworks to let the programmer design their code to work this way. In other words, it lets the code check if the data has already been retrieved before it goes and fetches it again, which is a relatively slow process since it has to query the database.
Redis có nhanh hơn bộ đệm tệp không?Các lần đọc tệp được lưu trữ bởi hệ điều hành hệ điều hành, vì vậy chúng là các hoạt động truyền bộ nhớ nhanh giữa kernel và Python.Không có đĩa I/O liên quan ở đây.Với Redis, bạn phải trả chi phí cho các vòng tròn, vì vậy nó chậm hơn nhiều.it is much slower. |