Sử dụng Memcache trong Laravel tăng tốc độ truy cập website
Memcache là một trong những công cụ được sử dụng rộng rãi để tăng tốc độ truy xuất dữ liệu trong các ứng dụng web. Trong Laravel, Memcache được tích hợp sẵn để giúp các lập trình viên tối ưu hóa hiệu suất của ứng dụng web của mình.
Tuy nhiên, không phải ai cũng biết cách sử dụng Memcache trong Laravel. Vì vậy, trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu cách sử dụng Memcache trong Laravel một cách dễ dàng và hiệu quả nhất. Chúng ta sẽ đi sâu vào các khái niệm cơ bản về Memcache, cách cài đặt và tích hợp Memcache vào Laravel, và cuối cùng là cách sử dụng Memcache để tối ưu hóa hiệu suất của ứng dụng Laravel của bạn. Hãy bắt đầu!
Memcache trong Laravel là gì ?
Memcache là một công cụ caching dữ liệu phổ biến được sử dụng để lưu trữ các giá trị tạm thời trong bộ nhớ cache, giúp tăng tốc độ truy xuất dữ liệu và giảm thời gian phản hồi của ứng dụng web.
Bài viết này được đăng tại [free tuts .net]
Trong Laravel, Memcache là một trong những công cụ được tích hợp sẵn, cho phép lưu trữ và truy xuất dữ liệu tạm thời thông qua Memcache server. Với Memcache, Laravel có thể cache các kết quả truy vấn database, tệp tin, đối tượng, và nhiều thứ khác để tối ưu hóa hiệu suất ứng dụng.
Sử dụng Memcache trong Laravel giúp cho việc truy xuất dữ liệu trở nên nhanh hơn, giảm tải cho server và nâng cao trải nghiệm người dùng. Tuy nhiên, để sử dụng Memcache trong Laravel, bạn cần cài đặt và cấu hình Memcache server đúng cách.
Cài đặt Memcache vào Laravel
Để cài đặt và tích hợp Memcache vào Laravel, bạn cần làm theo các bước sau:
Bước 1: Cài đặt Memcached
Trước tiên, bạn cần cài đặt Memcached trên máy chủ của mình. Bạn có thể cài đặt Memcached bằng cách chạy các lệnh sau trên Terminal:
Ubuntu:
sudo apt-get update sudo apt-get install memcached
CentOS:
sudo yum install memcached
Bước 2: Cài đặt Memcached PHP extension
Sau khi đã cài đặt Memcached, bạn cần cài đặt Memcached PHP extension để Laravel có thể kết nối và sử dụng Memcached. Bạn có thể cài đặt Memcached PHP extension bằng cách chạy các lệnh sau trên Terminal:
Ubuntu:
sudo apt-get install php-memcached sudo service apache2 restart
CentOS:
sudo yum install php-memcached sudo service httpd restart
Bước 3: Cấu hình Memcached driver cho Cache và Session trong Laravel
Mở file config/cache.php và thêm đoạn mã sau vào phần 'stores':
'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => env('MEMCACHED_WEIGHT', 100), ], ], ],
Mở file config/session.php và thay đổi giá trị của driver thành 'memcached':
'driver' => env('SESSION_DRIVER', 'memcached'),
Bước 4: Cấu hình các biến môi trường
Thêm các biến môi trường sau vào file .env:
MEMCACHED_HOST=127.0.0.1 MEMCACHED_PORT=11211 MEMCACHED_USERNAME=null MEMCACHED_PASSWORD=null
Bạn có thể thay đổi giá trị của các biến này tùy theo cấu hình của Memcached trên máy chủ của mình.
Sau khi hoàn tất các bước trên, bạn đã cài đặt và cấu hình Memcached driver cho Cache và Session trong Laravel. Bây giờ bạn có thể sử dụng Memcached để lưu trữ và lấy dữ liệu trong Laravel.
Cách sử dụng Memcache trong Laravel
Cache dữ liệu
Để sử dụng Memcache để cache dữ liệu trong Laravel, bạn cần cài đặt Memcache trên server và cài đặt extension Memcached cho PHP. Sau khi cài đặt, bạn có thể sử dụng class Cache của Laravel để lưu trữ và lấy dữ liệu từ Memcache.
Ví dụ:
// Lưu trữ dữ liệu vào cache Cache::put('key', 'value', $minutes); // Lấy dữ liệu từ cache $value = Cache::get('key');
Trong ví dụ trên, hàm put() của class Cache được sử dụng để lưu trữ giá trị 'value' vào cache với key là 'key' trong $minutes phút. Hàm get() được sử dụng để lấy giá trị từ cache.
Ngoài ra, bạn có thể sử dụng các phương thức khác của class Cache như has(), remember() và increment() để thao tác với Memcache.
Ví dụ:
// Kiểm tra key có tồn tại trong cache hay không if (Cache::has('key')) { // Lấy giá trị từ cache $value = Cache::get('key'); } else { // Tính toán giá trị mới và lưu vào cache $value = some_function(); Cache::put('key', $value, $minutes); } // Tạo cache với phương thức remember $value = Cache::remember('key', $minutes, function () { // Tính toán giá trị mới return some_function(); }); // Tăng giá trị của key trong cache Cache::increment('key');
Trong ví dụ trên, phương thức has() được sử dụng để kiểm tra xem key có tồn tại trong cache hay không. Nếu có, giá trị sẽ được lấy từ cache. Nếu không, giá trị mới sẽ được tính toán và lưu vào cache. Phương thức remember() được sử dụng để tạo cache với một closure, nếu key không tồn tại trong cache, closure sẽ được gọi để tính toán giá trị mới và lưu vào cache. Phương thức increment() được sử dụng để tăng giá trị của key trong cache.
Cache kết quả của các query
Caching kết quả của các query là một trong những cách tốt nhất để tối ưu hiệu suất ứng dụng Laravel. Khi bạn cache kết quả của các query, các lần truy vấn tiếp theo đến cùng một dữ liệu sẽ không phải truy cập vào cơ sở dữ liệu mà chỉ cần trả về dữ liệu từ cache, giúp giảm thời gian truy vấn và tăng tốc độ phản hồi của ứng dụng.
Để cache kết quả của các query trong Laravel bằng Memcached, bạn có thể sử dụng phương thức remember() trong model và chỉ định driver của cache là Memcached.
Ví dụ, giả sử bạn có một model Post và muốn cache kết quả của phương thức getLatestPosts():
// VD memcache laravel tại freetuts.net namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Cache; class Post extends Model { public function getLatestPosts() { return Cache::remember('latest_posts', 60, function () { return $this->orderBy('created_at', 'desc')->take(10)->get(); }); } }
Trong ví dụ trên, chúng ta đã sử dụng phương thức remember() để cache kết quả của query trong 60 phút. Key của cache là 'latest_posts', thời gian cache là 60 phút và function trong tham số cuối cùng được sử dụng để lấy dữ liệu từ database nếu cache không tồn tại.
Khi bạn gọi phương thức getLatestPosts() lần đầu tiên, ứng dụng sẽ truy vấn dữ liệu từ database và lưu kết quả vào Memcached với key là 'latest_posts'. Khi bạn gọi lại phương thức này, ứng dụng sẽ trả về kết quả từ cache thay vì truy vấn dữ liệu từ database.
Bạn có thể chỉnh sửa thời gian cache bằng cách sửa đổi tham số thứ hai của phương thức remember(). Ví dụ, để cache kết quả trong 5 phút, bạn chỉ cần thay đổi giá trị tham số thứ hai của phương thức remember() thành 5:
public function getLatestPosts() { return Cache::remember('latest_posts', 5, function () { return $this->orderBy('created_at', 'desc')->take(10)->get(); }); }
Lưu ý rằng việc sử dụng Memcached để cache kết quả của các query không phải là phương án tối ưu cho mọi trường hợp và bạn nên đánh giá kỹ trước khi áp dụng để đảm bảo rằng việc sử dụng này đáp ứng được yêu cầu của ứng dụng của bạn.
Cache session
Caching session là một trong những cách tối ưu hiệu suất ứng dụng Laravel. Thay vì lưu trữ dữ liệu phiên trong bộ nhớ của server, bạn có thể sử dụng Memcached để lưu trữ dữ liệu phiên và giảm tải cho server.
Bạn có thể sử dụng Memcached để lưu trữ session trong Laravel bằng cách chỉ định driver của session là Memcached trong file config/session.php.
Ví dụ:
return [ 'driver' => env('SESSION_DRIVER', 'memcached'), 'lifetime' => 120, 'expire_on_close' => false, 'encrypt' => false, 'files' => storage_path('framework/sessions'), 'connection' => null, 'table' => 'sessions', 'store' => null, 'lottery' => [2, 100], 'cookie' => 'laravel_session', 'path' => '/', 'domain' => env('SESSION_DOMAIN', null), 'secure' => env('SESSION_SECURE_COOKIE', false), 'http_only' => true, ];
Sau khi đã chỉ định driver của session là Memcached, Laravel sẽ tự động lưu trữ session vào Memcached.
Xóa cache
Để sử dụng Memcached để xóa cache trong Laravel, bạn cần đảm bảo đã cài đặt và cấu hình Memcached trong ứng dụng Laravel của bạn. Sau đó, bạn có thể sử dụng method forget của Facade Cache để xóa cache như sau:
use Illuminate\Support\Facades\Cache; // xóa cache với key là 'users' sử dụng Memcached Cache::store('memcached')->forget('users');
Trong đó, store('memcached') sẽ lấy cache driver được cấu hình để sử dụng Memcached.
Ngoài ra, bạn cũng có thể sử dụng method flush để xóa toàn bộ cache:
use Illuminate\Support\Facades\Cache; // xóa toàn bộ cache sử dụng Memcached Cache::store('memcached')->flush();
Để xóa cache thông qua command line, bạn có thể sử dụng command php artisan cache:clear
hoặc php artisan cache:forget {key}
với driver là memcached:
// xóa toàn bộ cache sử dụng Memcached thông qua command line php artisan cache:clear --driver=memcached // xóa cache với key là 'users' sử dụng Memcached thông qua command line php artisan cache:forget users --driver=memcached
Việc sử dụng Memcached để xóa cache trong Laravel giúp tăng tốc độ phản hồi của ứng dụng và giải phóng bộ nhớ, đồng thời cũng cần lưu ý định kỳ xóa cache để tránh ảnh hưởng đến hiệu suất của ứng dụng.
Một số câu hỏi liên quan đến Memcached trong Laravel
1. Memcached và Redis khác nhau như thế nào?
Memcached và Redis đều là các hệ thống caching, nhưng cách thức hoạt động của chúng khác nhau. Memcached chỉ hỗ trợ caching, trong khi Redis cung cấp một số tính năng nâng cao khác như đếm, đăng ký thông báo và phân tán dữ liệu. Redis cũng hỗ trợ các kiểu dữ liệu phức tạp hơn và được sử dụng nhiều hơn trong các ứng dụng đòi hỏi tính toán và đọc/ghi dữ liệu nhiều hơn.
2. Memcached có thể sử dụng được với bộ nhớ trong Laravel không?
Có thể. Memcached có thể được sử dụng với bộ nhớ trong Laravel để lưu trữ và truy xuất cache.
3. Memcached có hỗ trợ đa tầng cache không?
Memcached không hỗ trợ đa tầng cache mặc định, tuy nhiên, Laravel hỗ trợ việc sử dụng Memcached để lưu trữ cache ở cả bộ nhớ và đĩa. Bằng cách sử dụng driver cache đa tầng của Laravel, bạn có thể sử dụng Memcached kết hợp với một driver cache khác (ví dụ như file cache) để lưu trữ cache ở nhiều tầng khác nhau.
4. Memcached có hỗ trợ các tính năng khác ngoài caching không?
Không. Memcached chỉ hỗ trợ việc lưu trữ và truy xuất cache. Nếu bạn muốn sử dụng các tính năng khác như messaging hoặc đếm, Redis có thể là một lựa chọn tốt hơn.
Kết bài viết
Trong bài viết này, chúng tôi đã cung cấp cho bạn một số hướng dẫn về cách sử dụng Memcache trong Laravel để tối ưu hóa hiệu suất ứng dụng của bạn. Chúng tôi đã giải thích cách cài đặt Memcache vào Laravel và các cách sử dụng khác nhau của nó như caching dữ liệu, caching query, caching session và xoá cache.
Memcache là một công cụ hữu ích để cải thiện hiệu suất của ứng dụng Laravel của bạn bằng cách giảm thời gian truy cập cơ sở dữ liệu và tăng tốc độ trả về của ứng dụng. Nó giúp cho việc lưu trữ và truy xuất dữ liệu nhanh hơn, làm cho ứng dụng của bạn chạy nhanh hơn và đáp ứng được các yêu cầu của người dùng một cách nhanh chóng và hiệu quả.
Để sử dụng Memcache trong Laravel, bạn cần cài đặt Memcache trên máy chủ của bạn và sau đó cấu hình Laravel để sử dụng Memcache. Với cách thức sử dụng và cấu hình đơn giản, Memcache là một giải pháp tốt cho việc tăng tốc độ ứng dụng Laravel của bạn.
Hy vọng những hướng dẫn trong bài viết này sẽ giúp bạn tối ưu hóa hiệu suất của ứng dụng Laravel của mình bằng cách sử dụng Memcache.
Top 3 link tham khảo về Memcache trong Laravel
- Cách sử dụng Memcache trong Laravel :https://www.startupguys.net/memcache-in-laravel/
- Cấu hình Memcache trong Laravel : https://stackoverflow.com/questions/35181488/configure-memcached-in-laravel
- Mở rộng ứng dụng Laravel với Memcache : https://devcenter.heroku.com/articles/laravel-memcache