RUN pecl install -o -f redis \
&& rm -rf /tmp/pear \
&& docker-php-ext-enable redis
Khi cài đặt xong extension phpredis, đối với laravel mình cần cài thêm package predis/predis
sử dụng composer. Predis là một redis client viết bằng php được laravel sử dụng để thao tác với redis.
// Cài đặt predis package
composer require predis/predis
// Nếu gặp lỗi memory limit bạn hãy dùng command này
COMPOSER_MEMORY_LIMIT=-1 composer require predis/predis
Cấu hình redis database được lưu trong file config/database.php
giờ bạn chỉ cần khai báo các biến env ở trong file .env
là có thể dùng được redis rồi đó
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
Giờ viết một controller để test redis nhé
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Redis;
class HomeController extends Controller
{
public function redis()
{
Redis::set('name', 'Taylor');
$name = Redis::get('name');
dd($name); // Taylor
}
}
Kiểm tra xem key name đã được lưu vào redis chưa? đầu tiên truy cập vào redis
// Truy cập redis docker compose
docker-compose exec redis bash
// Connect với redis
redis-cli -h redis -p 6379
// Kiểm tra key có được lưu chưa
KEYS *name*
redis:6379> keys *name*
1) "laravel_database_name"
Rõ ràng là key chúng ta đặt tên là name
sao giờ lại lưu vào redis lại là laravel_database_name
liệu có sai sót gì không? câu trả lời là không nhé, trong file config/database.php
có khai báo option prefix, mặc định laravel sẽ thêm prefix là laravel_database_
trước các key khi lưu vào redis db nhé. Giờ thì get giá trị ra xem thế nào?
// Get value
GET laravel_database_name
redis:6379> GET laravel_database_name
"Taylor"
Cách check connect tới redis từ server
(printf "PING\r\n";) | nc [redis_host] [post]
Vd: (printf "PING\r\n";) | nc redis 6379
// Kết quả trả về: +PONG là connect được
Check connect to redis bằng php
public function checkConnectRedis(string $host, int $post): bool
{
exec('(printf "PING\r\n";) | nc ' . $host . ' ' . $port, $result);
$position = array_search('+PONG', $result);
if ($position !== 0) {
return false;
}
return true;
}
Sử dụng telnet connect đến redis server
telnet [redis_host] [redis_post]
VD: telnet redis 6379
Như vậy là chúng ta đã có thể sử dụng redis với laravel rồi, các bạn cùng làm thử xem nhé, Chúc các bạn thành công!