Giao diện
Redis
Giới thiệu (Introduction)
Redis là in-memory data structure store mã nguồn mở — được sử dụng làm database, cache, message broker, và streaming engine. Laravel tích hợp Redis qua extension phpredis hoặc package predis/predis.
Cấu hình (Configuration)
File cấu hình: config/database.php (section redis):
php
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],Clusters
php
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => 0,
],
],
],
],Predis
bash
composer require predis/predis:^2.0env
REDIS_CLIENT=predisPhpRedis
PhpRedis có hiệu suất tốt hơn. Cài đặt qua PECL:
bash
pecl install redisTương tác với Redis
php
use Illuminate\Support\Facades\Redis;
// Set / Get
Redis::set('name', 'Taylor');
$value = Redis::get('name');
// Gọi bất kỳ Redis command nào
$values = Redis::lrange('names', 5, 10);
// Connection cụ thể
$redis = Redis::connection('cache');
$value = $redis->get('name');Transactions
php
Redis::transaction(function ($redis) {
$redis->incr('user_visits', 1);
$redis->incr('total_visits', 1);
});LƯU Ý
Redis transactions không hỗ trợ rollback. Nếu lệnh lỗi trong transaction, các lệnh khác vẫn tiếp tục thực thi.
Pipelining Commands
Gửi nhiều commands cùng lúc (giảm network roundtrips):
php
Redis::pipeline(function ($pipe) {
for ($i = 0; $i < 1000; $i++) {
$pipe->set("key:$i", $i);
}
});Pub/Sub
Subscribe
php
use Illuminate\Support\Facades\Redis;
Redis::subscribe(['test-channel'], function (string $message) {
echo $message;
});Wildcard Subscriptions
php
Redis::psubscribe(['*'], function (string $message, string $channel) {
echo $message;
});
Redis::psubscribe(['users.*'], function (string $message, string $channel) {
echo $message;
});Publish
php
use Illuminate\Support\Facades\Redis;
Route::get('/publish', function () {
Redis::publish('test-channel', json_encode([
'name' => 'Adam Wathan',
]));
});Subscribe Command
Tạo artisan command cho subscribing:
php
// Trong artisan command
$this->info('Subscribing to test-channel...');
Redis::subscribe(['test-channel'], function (string $message) {
$this->info($message);
});Chạy: php artisan redis:subscribe