Trong bài trước mình đã giới thiệu cho các bạn khái niệm về cache và các phương thức để sử dụng cache trong Laravel 5. Trong bài này mình sẽ làm các ví dụ cụ thể để các bạn có thể hiểu rõ hơn về cách sử dụng cache trong Laravel 5.

1. Lưu và lấy dữ liệu trong cache

Trong các website, có những thành phần mà nội dung gần như ko thay đổi mỗi khi bạn tải trang chẳng hạn như các phần FAQ (Frequently asked questions – Các câu hỏi thường gặp), giới thiệu, liên hệ. Với những phần đó, thay vì mỗi lần người dùng tải trang thì bạn phải truy vấn tới cơ sở dữ liệu (CSDL) để lấy các thông tin đó thì bạn chỉ cần lưu vào trong cache để hiển thị lên cho người dùng.

Ví dụ ở đây chúng ta tạo một bảng “faq” để lưu các câu hỏi thường gặp trong trang web và lưu vào trong CSDL. Khi người dùng tải trang web thì ta sẽ lưu phần đó vào trong cache để hiển thị khi người dùng tải trang web trong các lần sau.

Đầu tiên, các bạn tạo model “faq” bằng lệnh php artisan make:model faq –m trong console (cmd) như sau:

1

Sau đó các bạn vào file database/migrations/_create_faqs_table.php và thay đổi nội dung hàm up như sau để tạo các trường cho bảng “faqs” trong CSDL.

Cập nhật xong, các bạn chạy lệnh php artisan migrate trong console để thực hiện việc đồng bộ với CSDL:

3

4

Sau đó các bạn thêm dữ liệu vào trong CSDL (thêm trực tiếp trong CSDL hoặc dùng tinker trong console):

5

Tiếp theo đó, các bạn vào trong file app/Http/routes.php và thêm vào các dòng lệnh sau để hiển thị các FAQ vừa tạo ở trên cùng với một listener để hiển thị query truy vấn tới CSDL mỗi khi bạn tải trang hiển thị FAQ như sau:

Các bạn vào đường dẫn “/faq/” thì sẽ thấy câu lệnh truy vấn tới CSDL hiện lên cùng với kết quả như sau:

7

Tức là mỗi lần các bạn tải trang thì lại phải truy vấn tới CSDL để lấy dữ liệu thay vì đó ta có thể lưu kết quả vào cache và sử dụng trong các lần sau. Các bạn vào trong file app/Http/routes.php và thay đổi lại nội dung của route ‘/faq’ như sau:

Sau đó nếu các bạn vào lại route “/faq” lần đầu tiên thì kết quả vẫn sẽ như lần trước tuy nhiên nếu các bạn tải lại trang sẽ thấy mất câu lệnh truy vấn tới CSDL bởi vì dữ liệu đã được lưu vào trong cache và được hiển thị ra từ đó.

10

Gợi ý: Tặng coupon 40% giá trị khóa học tạo website với Laravel 5

Các bạn có thể vào trong storage/framwork/cache và thấy dữ liệu được lưu vào trong file (đối với cấu hình mặc định) như sau:

11

Tuy nhiên, thay vì phải kiểm tra xem có các FAQ trong cache không và lấy trong CSDL trong trường hợp không có thì ta có thể sử dụng lệnh remember để thay thế như sau:

Kết quả sẽ tương tự như trên nhưng cách làm đơn giản hơn rất nhiều bạn chỉ cần phải sử dụng 1 hàm.

Nếu bạn muốn lưu các dữ liệu FAQ trong CSDL vĩnh viễn (cho đến khi bạn muốn xóa hoặc cập nhật lại) thì bạn có thể sử dụng hàm forever như sau:

Hoặc là kết hợp cả 2 hàm rememberforever như sau:

2. Xóa dữ liệu trong cache

Nếu các bạn muốn lấy dữ liệu trong cache ra và xóa đi luôn thì các bạn có thể dùng hàm pull như sau:

Các bạn vào route ‘/faq’ thì lần đầu tiên vẫn sẽ hiện kết quả các FAQ có chứa trong CSDL:

10

Tuy nhiên các bạn tải lại trang thì sẽ nhận được thông báo không còn dữ liệu trong cache nữa do dữ liệu đã bị xóa trong cache sau khi các bạn sử dụng hàm pull:

17

Ngoài ra đối với những dữ liệu trước đó bạn đã lưu bằng hàm forever hoặc rememberForever thì các bạn hãy dùng lệnh forget để xóa dữ liệu đó đi:

Trong trường hợp bạn muốn xóa tất cả dữ liệu trong cache các bạn có thể dùng hàm flush tuy nhiên lưu ý là nếu các bạn dùng cache chung với các ứng dụng khác thì hàm này sẽ xóa hết tất cả dữ liệu của các ứng dụng đó.

Như vậy trong bài viết này mình đã hướng dẫn các bạn sử dụng các lệnh lưu, lấy và xóa dữ liệu trong cache thông qua ví dụ cụ thể. Để tìm hiểu thêm các bạn có thể vào đọc tài liệu về cache của Laravel 5 tại đây. Chúc các bạn thực hiện thành công và nếu có thắc mắc gì thì hãy comment phía dưới nhé : )

Xem thêm : Khóa học tạo website hoàn chỉnh với Laravel 5 tặng mã giảm giá 40% + Hỗ trợ việc làm sau khi học xong

Đánh giá bài viết
Bạn có muốn tham gia nhóm thảo luận ICO tốt nhất ?

No Comments Yet

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

loading...