Bài 17: Cache trong Laravel (Phần 2)

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
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 remember và forever 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 đó.

Comments

Popular Posts