Hướng dẫn Laravel redis

  • December 14, 2020
  • 2264
Redis là mã nguồn mở, lưu trữ dữ liệu theo dạng key - value. Trước khi sử dụng redis với laravel nói riêng, php nói chung bạn cần cài đặt php-redis một extension của php thông qua PECL. Ở bài viết này mình sẽ cái đặt php-redis extension sử dụng dockerfile, trong dockerfile bạn chỉ cần thêm đoạn code sau.
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.phpcó 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!