Laravel cache được lưu trữ ở đâu?

Laravel có các bộ đệm khác nhau cho các phần khác nhau trong ứng dụng của bạn và do đó, có nhiều cách để xóa bộ đệm Laravel

Làm việc thông minh hơn với Tinkerwell

Viết và chạy PHP ngay lập tức mà không cần làm mới trình duyệt của bạn hoặc tải tệp lên máy chủ web

Tìm hiểu thêm

bộ đệm ứng dụng

Bộ đệm ứng dụng là bộ đệm chính trong Laravel. Nó lưu trữ mọi thứ mà bạn lưu trữ thủ công trong ứng dụng của mình. Bạn chỉ có thể xóa các phần tử cụ thể của bộ đệm nếu bạn sử dụng thẻ hoặc các kho lưu trữ bộ đệm khác nhau. Cách dễ nhất để xóa Laravel cache là thông qua artisan

Xóa bộ đệm của Laravel thông qua lệnh artisan

php artisan cache:clear

Nếu bạn sử dụng nhiều bộ đệm và bạn muốn xóa một cửa hàng cụ thể, bạn có thể chuyển thông số này làm tham số cho lệnh

php artisan cache:clear --store=redis

Bạn có thể xóa các mục đã lưu trong bộ nhớ cache bằng các thẻ cụ thể bằng lệnh

php artisan cache:clear --tags=tag1,tag2

Xóa bộ đệm Laravel theo chương trình

Xóa các mục khỏi bộ đệm theo chương trình dễ dàng như xóa bộ đệm thông qua lệnh thủ công. Ngoài ra bạn có thể sử dụng cache facade để truy xuất cache hoặc sử dụng cache helper

Cache::flush[]
cache[]->flush[]

Xóa các mục đã lưu trong bộ nhớ cache bằng thẻ

php artisan cache:clear --store=redis
3 dễ dàng như xóa một kho lưu trữ bộ nhớ cache cụ thể

cache[]->store['redis']->tags['awesome-tag']->flush[]

Bất cứ khi nào tôi muốn kiểm tra xem có mục nào trong bộ đệm hay xóa mục đó khỏi bộ đệm không, tôi khởi động Tinkerwell và chạy các lệnh ở trên

Xem bộ đệm

Một phần khác của ứng dụng có bộ đệm là bộ đệm xem. Bộ đệm xem lưu trữ các mẫu Blade đã kết xuất để tăng tốc ứng dụng của bạn. Bạn có thể hiển thị thủ công tất cả các chế độ xem để tăng hiệu suất bằng cách sử dụng lệnh thủ công cho nó

php artisan view:cache

Nếu bạn sử dụng cách tối ưu hóa này, bạn phải xóa bộ đệm nếu bạn triển khai mã mới, nếu không, Laravel sẽ sử dụng chế độ xem cũ của bạn và bạn sẽ cố gắng gỡ lỗi mãi mãi. Bạn có thể xóa view cache của Laravel bằng lệnh

php artisan view:clear

Cấu hình bộ đệm

Laravel khuyên bạn nên lưu vào bộ đệm các tệp cấu hình của mình để ứng dụng không cần phải duyệt qua tất cả các tệp cấu hình trong khi khởi động khung

Bạn có thể kết hợp tất cả các tệp cấu hình thành một tệp lớn và tối ưu hóa hiệu suất bằng lệnh

________số 8

Đảm bảo xóa bộ đệm này nếu bạn thay đổi cấu hình, chẳng hạn như trong quá trình triển khai sản xuất

php artisan config:clear

bộ đệm sự kiện

Khi chạy trong sản xuất, bộ nhớ đệm Sự kiện và Trình lắng nghe của chúng cho phép xử lý sự kiện hiệu quả. Laravel khuyến nghị cache các event và listener trong quá trình triển khai của bạn – và điều này có nghĩa là bạn cũng phải xóa cache sự kiện

Để lưu trữ các sự kiện và trình nghe, hãy chạy lệnh

php artisan cache:clear --store=redis
4 trong quá trình triển khai của bạn

php artisan cache:clear --store=redis
1

Lệnh

php artisan cache:clear --store=redis
4 tự động xóa tất cả bộ đệm sự kiện, nhưng nếu phải chạy thủ công, bạn có thể thực hiện như sau

php artisan cache:clear --store=redis
0

Bộ đệm định tuyến

Bộ đệm định tuyến là bộ đệm hiệu suất bổ sung mà bạn chỉ muốn sử dụng trong sản xuất và là một phần của quy trình triển khai của mình. Lưu vào bộ nhớ đệm các tuyến đường của bạn giúp giảm đáng kể thời gian đăng ký các tuyến đường của ứng dụng của bạn. Bạn có thể lưu trữ các tuyến đường thông qua

php artisan cache:clear --store=redis
1

Trong trường hợp bạn thay đổi tuyến đường hoặc thử lệnh bộ đệm trong quá trình phát triển, bạn phải xóa bộ đệm tuyến đường nếu không ứng dụng của bạn sẽ không tìm thấy tuyến đường mới. Bạn xóa bộ đệm tuyến đường bằng lệnh

php artisan cache:clear --store=redis
2

tinkerwell. Trình chạy mã cho PHP

Người bạn đồng hành không thể thiếu với IDE yêu thích của bạn. Nhanh chóng lặp lại mã PHP trong ngữ cảnh của ứng dụng web của bạn

Là một nhà phát triển front-end trước đây, đây là lần đầu tiên tôi làm việc trên một dự án sử dụng framework [công việc trước đây của tôi chủ yếu tập trung vào bố cục và tính thẩm mỹ của trang web]. Cho rằng đó là lỗi của người lần đầu tiên, việc bỏ qua việc sử dụng bộ đệm là một lỗi khá lớn

Chính xác thì chuyện gì xảy ra?

Một phần trong vai trò hiện tại của tôi hiện bao gồm giám sát ứng dụng và kiểm tra xem ứng dụng có tuân theo tiêu chuẩn để ứng dụng hoạt động với tiềm năng tốt nhất không. Giám sát là một trong những điều quan trọng nhất mà nhà phát triển nên làm sau giai đoạn phát triển. Việc quan sát và ghi lại các hoạt động khác nhau này giúp chúng tôi có thêm thông tin có thể được sử dụng để cải thiện và kiểm tra xem nó có hoạt động bình thường hay không. Khi một ứng dụng được triển khai trên máy chủ sản xuất, các nhà phát triển sẽ giám sát các hoạt động của ứng dụng

Vấn đề hiệu suất

Một phần của ứng dụng thu hút sự chú ý của chúng tôi là thư mục lưu trữ bộ nhớ cache của dự án sử dụng Laravel làm khung. Khi nhóm theo dõi hiệu suất máy chủ của ứng dụng, chúng tôi phát hiện ra rằng máy chủ gặp sự cố khi số lượng người dùng tăng lên;

Tin tôi đi, số lượng thư mục có thể lên đến hàng nghìn ngay lập tức

Sau một số nghiên cứu, phân tích và điều tra, chúng tôi đã tìm ra nguyên nhân của sự cố này, chúng tôi đã bỏ qua một số quy trình lưu một số tệp trên thư mục đó, nó chiếm dung lượng lớn trong kịch bản I/O cao của ứng dụng. Đó là lý do tại sao chúng ta cần hiểu đầy đủ về cách sử dụng bộ đệm trong dự án, đặc biệt là khi sử dụng một framework như Laravel

Sử dụng Memcached

Trong thời gian chờ đợi, để giải quyết vấn đề có một số lượng lớn các tệp không sử dụng — hoặc có thể là cần thiết, nhưng tôi không biết nó quan trọng như thế nào và tại sao vào lúc này — , chúng tôi đã quyết định sử dụng Memcached làm trình điều khiển được lưu trong bộ nhớ cache của . Chúng tôi đã thay thế giá trị mặc định CACHE_DRIVER từ ‘file’ thành ‘memcached’ trên. env để có ảnh hưởng đến config/cache. php, trong đó hằng số được sử dụng trong mã này

php artisan cache:clear --store=redis
6
php artisan cache:clear --store=redis
7

như memcached. tổ chức mô tả

Memcached là một hệ thống bộ nhớ đệm đối tượng bộ nhớ phân tán hiệu suất cao, mã nguồn mở, miễn phí, có bản chất chung, nhưng được sử dụng để tăng tốc các ứng dụng web động bằng cách giảm tải cơ sở dữ liệu. Memcached đơn giản nhưng mạnh mẽ. Thiết kế đơn giản của nó thúc đẩy triển khai nhanh chóng, dễ phát triển và giải quyết nhiều vấn đề đối mặt với bộ đệm dữ liệu lớn. Lưu ý rằng nếu bạn muốn sử dụng memcached làm trình điều khiển bộ đệm, bạn cần cài đặt gói Memcached PECL trên máy chủ của mình

Chắc chắn, nó giải quyết vấn đề bằng cách không tạo tệp và thay vào đó lưu trữ bộ đệm trên trình điều khiển memcached. Tôi nghĩ nó nên kết thúc, phải không? . Mãi mãi]. Tại thời điểm này, chúng ta chỉ cần xóa thủ công tất cả các tệp bộ đệm đã tạo được lưu trên thư mục bộ đệm

Sự cố này mở ra cơ hội tìm hiểu về bộ đệm.
Ngoài ra, nó còn mở ra câu hỏi.

tại sao ứng dụng sử dụng bộ đệm tự động?

Sử dụng Laravel Cache

Laravel cung cấp cho chúng ta các chức năng tích hợp này để xử lý loại bộ đệm này và đây là

  • Bộ nhớ cache. Đặt[]
  • Bộ nhớ cache. Được[]
  • Bộ nhớ cache. Mãi mãi[]
  • Bộ nhớ cache. Có[]

Để sử dụng bất kỳ chức năng nào trong số này, chúng ta cần sử dụng Illuminate/Contracts/Cache/Factory và Illuminate/Contracts/Cache/Repository, điều này cho phép chúng ta truy cập vào các dịch vụ bộ nhớ đệm của Laravel

Vấn đề duy nhất là chúng tôi chưa bao giờ sử dụng bất kỳ chức năng nào đã nêu ở trên. Không có trong bất kỳ phần nào của mã của chúng tôi trong dự án. Vâng, không phải là chúng tôi nhận thức được

Để điều tra, chúng tôi đã chọn một trong các dự án của mình trong máy cục bộ để theo dõi khi nó đang lưu bộ đệm. Để bắt đầu, chúng tôi đặt lại CACHE_DRIVER thành 'tệp' để dữ liệu có thể hiển thị để điều tra

Trong quá trình kiểm tra tất cả các hành động của ứng dụng, chúng tôi nhận thấy rằng mỗi khi ứng dụng lưu bộ đệm, nó sẽ đưa dữ liệu này vào thư mục lưu trữ/framework/cache/data

Biết bộ đệm, '1562547945' là khóa để truy cập giá trị được đặt trên tệp này. Trong trường hợp này, giá trị là '1'. Để giải thích thêm, nếu chúng tôi cố tình lưu bộ đệm với giá trị 'đây là bộ đệm. ', nội dung được cho là của tệp bộ đệm là 1562547945. đây là một bộ đệm

Vì vậy, câu hỏi đầu tiên là, "giá trị '1' này đến từ đâu?"

Sử dụng thanh gỡ lỗi Laravel, chúng tôi cố gắng theo dõi phần nào của ứng dụng lưu tệp bộ đệm. Cùng với quy trình thử và sai thủ công từng cái một, chúng tôi theo dõi từng mã đang chạy trong một quy trình. Bộ đệm chỉ được tạo khi tuyến API được gọi. Có vẻ như bộ đệm được tạo khi chúng tôi truy cập các tuyến web của mình, nhưng điều đó chỉ xảy ra vì chúng tôi cũng gọi các API của mình qua ajax. Chúng tôi nhận thấy rằng mỗi khi chúng tôi truy cập vào phía API của ứng dụng, nó sẽ tạo các tệp bộ đệm. Chúng tôi phát hiện ra rằng Phần mềm trung gian API của Laravel có tính năng điều tiết tích hợp

Xem đây là điểm khác biệt duy nhất của API trên các route khác trên app/Http/Kernel. php

Nó sử dụng một 'van tiết lưu' và sau đó chúng tôi nhận thấy điều này ở phần dưới của Kernel

Tệp ThrottleRequests này dẫn đến /vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests này. php, sử dụng gói này. `sử dụng Illuminate\Cache\RateLimiter;`

Cái nào có chức năng này

Nơi nó sử dụng bộ đệm để theo dõi số lượng lệnh gọi API và tạo giới hạn truy cập mỗi phút. Đây là cách đơn giản nhất để giải thích ga

Chúng tôi đã tạo một tuyến đường mẫu trên tuyến đường API nằm trong phần mềm trung gian API

lộ trình API

Như bạn có thể thấy, số lần nó được truy cập đã được ghi lại trên tệp bộ đệm bên trái, đếm cho đến 60 [giới hạn truy cập dưới một phút], sau đó trả về lỗi khi vượt quá

Sử dụng thanh gỡ lỗi của Laravel, chúng tôi có thể kiểm tra ngay trang đã được lưu vào bộ đệm chưa và cung cấp đầy đủ thông tin để dễ dàng quan sát

Điều này dễ dàng hơn nhiều so với việc kiểm tra mã thủ công của chúng tôi và chèn một số mã kiểm tra, điều này có thể khiến chúng tôi quên xóa các mã đó

Bây giờ chúng ta biết rằng điều tiết là thứ lưu các tệp bộ đệm, chúng ta có thể tắt nó nếu chúng ta nghĩ rằng điều này là không cần thiết cho dự án

Phần kết luận

Tóm lại, chúng tôi đã học được hai cách tại sao khung lưu trữ bộ nhớ cache, cách thứ nhất là Mặt tiền bộ đệm, trong đó chúng tôi sẽ sử dụng nó một cách có chủ ý, tùy thuộc vào quy trình ứng dụng của chúng tôi và cách còn lại là Bộ điều tiết, cách thứ hai

Nên sử dụng Memcached làm CACHE_DRIVER để ngăn sự cố này trong bộ nhớ, đặc biệt khi chúng tôi không cần nhiều bộ nhớ cache. Memcached phù hợp với I/O cao của ứng dụng

Điều này cho chúng ta hai lựa chọn

  1. Tắt tiết lưu
  2. Tiếp tục bật điều chỉnh và sử dụng memcached làm CACHE_DRIVER

Cả hai tùy chọn này đều ngăn lưu các tệp bộ đệm không cần thiết

Trong trường hợp điều đó xảy ra lần nữa hoặc phát sinh vấn đề tương tự, chúng tôi khuyên bạn nên luôn điều tra các phần của ứng dụng gây ra mức tiêu thụ lớn dung lượng lưu trữ và những thứ có thể ảnh hưởng đến I/O khi nhiều người dùng sử dụng nó. Ngoài ra, sử dụng các công cụ sửa lỗi như thanh gỡ lỗi Laravel, giảm thiểu thời gian điều tra luồng ứng dụng. Đó là một trợ giúp tuyệt vời, đặc biệt là đối với những người mới bắt đầu cần hiểu các loại chủ đề này, đặc biệt là các tệp bộ nhớ cache

Chủ Đề