2016-07-07 22 views
5

Tôi đang sử dụng Redis để truy vấn bộ nhớ cache/tuyến trong Laravel 5.2.Làm cách nào để xóa bộ nhớ cache trong Laravel bằng dòng lệnh?

Tôi có 3 môi trường chạy trên cùng một máy chủ web, tức là "sản xuất", "dàn dựng" và "phát triển".

Đối với mỗi môi trường, tôi đặt bộ nhớ cache khác nhau prefix giá trị để cho phép tôi liên kết bộ nhớ cache với môi trường khác.

Trong tập tin config/cache.php Tôi đã thay đổi dòng

'prefix' => 'laravel', 

Để

'prefix' => ENV('CACHE_PREFIX', 'laravel'), 

Sau đó, trong tập tin .env của tôi, tôi đã thêm tiền tố cho mỗi môi trường như thế này

Đối với Dev

CACHE_PREFIX="LaravelDev" 

Đối Staging

CACHE_PREFIX="LaravelStaging" 

Đối với sản xuất

CACHE_PREFIX="LaravelProduction" 

Tôi biết tôi có thể xóa bộ nhớ cache từ dòng lệnh như thế này

php artisan cache:clear 

Nhưng các mã trên sẽ xóa bộ nhớ cache cho tất cả môi trường của tôi.

Tôi chỉ muốn xóa bộ nhớ cache "LaravelDev" chỉ và để lại một mình "LaravelStaging" và "LaravelProduction"

Làm thế nào tôi có thể xóa bộ nhớ cache cho một môi trường cụ thể?

Trả lời

10

Lệnh cache:clear sẽ xóa tất cả bộ nhớ cache được kết hợp với kết nối với cơ sở dữ liệu.

Nếu bạn muốn sử dụng cùng một máy chủ Redis với nhiều phiên bản, bạn có thể sử dụng cơ sở dữ liệu Redis khác nhau cho từng trường hợp.

Trong tập tin .env bạn có thể thêm như sau

Đối với môi trường sản xuất của bạn

REDIS_DATABASE=0 

Đối Staging của bạn Môi trường

REDIS_DATABASE=1 

Đối với môi trường phát triển của bạn

REDIS_DATABASE=2 

Sau đó, trong config\database.php trong sự thay đổi Redis phần dòng này 'database' => 0, để 'database' => env('REDIS_DATABASE', 0),

Bây giờ bạn có thể xóa bộ nhớ cache cho bất kỳ môi trường của bạn bằng cách sử dụng lệnh sau

php artisan cache:clear 
+1

Brilliant! Cảm ơn bạn rất nhiều – Jaylen

+0

^đồng ký điều đó! –

0

Lệnh nghệ nhân cache:clear gọi hàm flush trên trình kết nối hiện tại là gì. Khi các công cụ lưu bộ nhớ đệm thay đổi theo chức năng, tôi không nghĩ rằng nó có thể hết hạn các khóa có chọn lọc lưu trữ API bộ nhớ cache phổ dụng. Động cơ như Redis cung cấp chức năng như vậy, nhưng memcached ví dụ không.

Nếu bạn đang sử dụng Redis, bạn có thể sửa đổi trình kết nối mặc định để sử dụng lệnh 'SCAN/DEL' cho phương thức flush(). Tuy nhiên điều này sẽ không hiệu quả lắm.

Nếu ứng dụng của bạn sử dụng bộ đệm ẩn đúng cách, nó sẽ không gây ra bất kỳ sự cố nào do bộ nhớ cache sẽ tự xây dựng lại. Bạn sẽ không bao giờ mong đợi một số dữ liệu trong bộ nhớ cache vì nó có thể hết hạn.

+0

Khi tôi thực hiện bộ nhớ cache php nghệ nhân: rõ ràng nó xóa tất cả mọi thứ trong Redis. Tôi chỉ thử nghiệm nó một lần nữa. Vấn đề mà tôi thấy là những người dùng đang sử dụng ứng dụng sẽ gặp lỗi mã thông báo không khớp vì phiên cũng bị xóa. – Jaylen

+0

Giải pháp là sử dụng loại bộ nhớ khác nhau cho các phiên trong môi trường Staging và Dev của bạn, do đó việc xóa bộ nhớ cache sẽ không ảnh hưởng đến người dùng trực tiếp. –

+0

Tôi không thể tạo một dòng lệnh sẽ thực thi mã sau đây? $ redis = Cache :: getRedis(); $ keys = $ redis-> keys (Cache :: getPrefix(). "*"); foreach ($ keys là $ key) { Bộ nhớ cache :: quên ($ key); } – Jaylen

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