Redis trong Laravel

Giới thiệu

Redis là một kho lưu trữ cấu trúc dữ liệu trong bộ nhớ mã nguồn mở (được cấp phép BSD), được sử dụng làm cơ sở dữ liệu, bộ nhớ đệm, trình trung gian thông báo và công cụ phát trực tuyến. Redis cung cấp các cấu trúc dữ liệu chẳng hạn như strings, lists, hashes, sets, sorted sets, bitmaps, hyperloglogs, geospatial indexes…

Cài đặt Redis trong Laravel

1. Cài redis trên hệ thống

Bạn có thể tải redis từ website chính thức của redis, sau khi cài đặt bạn có thể kiểm tra xem đã cài được chưa

redis-cli ping

Nếu phản hồi bạn nhận được là “PONG” thì bạn đã hoàn tất cài đặt redis.

Trước khi sử dụng Redis với Laravel, bạn sẽ cần cài đặt package predis/predis thông qua Composer (Trong hướng dẫn này mình sẽ sử dụng predis):

composer require predis/predis

Ngoài ra, bạn có thể cài đặt tiện ích mở rộng PhpRedis PHP qua PECL. Tiện ích mở rộng cài đặt phức tạp hơn nhưng có thể mang lại hiệu suất tốt hơn cho các ứng dụng sử dụng nhiều Redis.

2. Cấu hình redis trong Laravel

Bạn có thể định cấu hình cài đặt Redis cho ứng dụng của mình thông qua file cấu hình config/database.php . Trong tệp này, bạn có thể có nhiều cấu hình tùy theo nhu cầu.

'redis' => [
    'client' => env('REDIS_CLIENT', 'predis'),
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],
    'dbrs_1' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '1'),
    ],

]

3. Sử dụng redis cơ bản

a. Sử dụng nhiều kết nối Redis

Bạn có thể get redis intance bằng cú pháp sau

$redis = Redis::connection("dbrs_1");

Mặc định nếu không nhập redis sẽ sử dụng cấu hình default

b. Có 2 cách sử dụng redis trong laravel

– Gọi trực tiếp tên method:

$redis->{$method}($key, $value);

– Gọi qua method command:

$redis->command($method, $parameters);

Example:

$redis = Redis::connection(); 
Redis::lpush('key_list', ["foo","bar"]);

– Gọi trực tiếp tên method:

$values = Redis::lrange('key_list', 0, 2);

– Gọi qua method command:

$values = Redis::command('lrange', ['key_list', 0, 2]);

4. Cấu trúc dữ liệu và 1 số method thường dùng

SET EXPIRE AND GET KEYS

Độ phức tạp về thời gian: N là số khóa

MethodĐộ phức tạpMô tả
keysO(N)Trả về tất cả các key phù hợp pattern
Example:
Redis::keys('*');
expireO(1)Set Thời gian hết hạn của key 
Example:
Redis::expire('key_expire', 600);

CẤU TRÚC STRING

Độ phức tạp về thời gian: N là số khóa

MethodĐộ phức tạpMô tả
setO(1)Thiết lập dữ liệu cho key 
Example:
Redis::set('key', 'value');
setNxO(1)Thiết lập dữ liệu cho key nếu key đó không tồn tại 
Example:
Redis::setNx('key', 'value');
getO(1)Get giá trị của key
Example:
Redis::get('key');
delO(N)  Xóa 1 hoặc nhiều key
Example:
Redis::del('key', 'key1');
Redis::del(['key', 'key1']);
incrO(1)Tăng giá trị của key lên 1 với dữ liệu của key là integer 
Example:
Redis::incr('key_incr');
decrO(1)Giảm giá trị của key lên 1 với dữ liệu của key là integer
Example:
Redis::decr('key_decr');

CẤU TRÚC LIST

Độ phức tạp về thời gian: N là phần tử, S là khoảng cách bù bắt đầu từ HEAD cho các danh sách nhỏ, từ đầu gần nhất (HEAD hoặc TAIL) cho các danh sách lớn.

MethodĐộ phức tạp Mô tả
lPushO(N) Thêm các giá trị vào bên trái danh sách và trả về độ
dài của danh sách sau khi push
Example:
Redis::lPush('key_list', ["foo", "bar"]);
rPushO(N)Thêm các giá trị vào bên phải danh sách và trả về độ
dài của danh sách sau khi push
Example:
Redis::rPush('key_list', ["foo", "bar"]);
lPopO(N)Loại bỏ các phần tử đầu tiên khỏi danh sách và trả về
phần tử đã được xóa khỏi list.
Example:
Redis::lPop('key_list', 2);
rPopO(N)Loại bỏ các phần tử cuối cùng khỏi danh sách và trả về
phần tử đã được xóa khỏi list.
Example:
Redis::rPop('key_list', 2);
lRangeO(S+N)Trả về các phần tử được chỉ định của danh sách đã được
lưu trữ tại key
Example:
Redis::lRange('key_list', 0, 2);
lLenO(1)Trả về số lượng phần tử lưu tại key
Example:
Redis::lLen('key_list');

CẤU TRÚC HASH

Độ phức tạp về thời gian: N là số field

MethodĐộ phức tạpMô tả
hSetO(1)Thêm field và giá trị vào hàm băm tại key chỉ định
Example:
Redis::hSet('key_hash', "field", "value");
hSetNxO(1)Chỉ thêm field và giá trị vào hàm băm tại key chỉ
định nếu field đó không tồn tại
Example:
Redis::hSet('key_hash', "field", "value");
hGetO(1)Trả về giá trị field trong hàm băm tại key chỉ định
Example:
Redis::hGet('key_hash', "field");
hGetAllO(N)Trả về tất cả field và giá trị trong hàm băm tại
key chỉ định
Example:
Redis::hGetAll ('key_hash');
Method: hExistsO(1)Kiểm tra field có được lưu trong hàm băm tại key
chỉ định không
Example:
Redis::hExists('key_hash', "field");
hDelO(N)Xóa các field đã cho khỏi hàm băm tại key chỉ định
Example:
Redis::hDel('key_hash', 'field', 'field1');
Redis::hDel('key_hash', ['field', 'field1']);
hKeysO(N)Trả về tất cả các field có trong hàm băm tại key
chỉ định
Example:
Redis::hKeys('key_hash');
hmSetO(N)Tương tự hset, hmSet sẽ thêm nhiều field và giá
trị vào hàm băm tại key chỉ định
Example:
Redis::hmSet('key_hash', [
"field" => "value",
"field1" => "value1"
]);
hmGetO(N)Tương tự hget, hmGet sẽ trả về giá trị các field
tìm kiếm có trong hàm băm tại key chỉ định
Example:
Redis::hmGet('key_hash', ["field", "field1"]);
hLenO(1)Trả về số lượng phần tử lưu tại key
Example:
Redis::hLen('key_hash');

CẤU TRÚC SET

Độ phức tạp về thời gian: N là số phần tử

Method Độ phức tạpMô tả
sAddO(N)Thêm các phần tử vào key chỉ định
Example:
Redis::sAdd('key_set', "php", "js")
Redis::sAdd('key_set', ["php", "js"]);  
sMembersO(N)Trả về tất cả các phần từ được lưu trữ tại key
chỉ định
Example:
Redis::sMembers('key_set');
sIsMemberO(1)Kiểm tra xem phần tử có tồn tại trong key chỉ
định hay không
Example:
Redis::sIsMember('key_set', "php");
sPopO(log(N)+M)Loại bỏ và trả lại một hoặc nhiều phần tử ngẫu
nhiên từ key chỉ định
Example:
Redis::sPop('key_set', 2);
sRemO(N)Xóa các phần tử được chỉ định tại key
Example:
Redis::sRem('key_set', ["php", "js"]);
sCardO(1)Trả về số lượng phần tử lưu tại key
Example:
Redis::sCard('key_set');

CẤU TRÚC SORTED SET

Độ phức tạp về thời gian: N là số phần, M là số phần tử được trả về hoặc xóa đối với zRem

MethodĐộ phức tạpMô tả
zAddO(log(N))Thêm các phần tử vào tập hợp và score trong example này là 1,2,3
Example:
Redis::zAdd( 'key_sorted_set', [
"one" => 1,
"two" => 2,
"three" => 3
]);  
zRangeO(log(N)+M)Lấy ra các phần tử của tập hợp đã sắp xếp được lưu trữ tại key chỉ định
Example:
Redis::zRange('key_sorted_set', 0, 2);
Result example: [0 => "one", 1 => "two", 2 => "three"]
zRangeByScoreO(log(N)+M)Lấy ra các phần tử của tập hợp theo phạm vi của score tại key chỉ định
Example:
Redis::zRangeByScore('key_sorted_set',0,2);
Result example: [0 => "one", 1 => "two"]  
zRemO(M*log(N))Xóa các phần tử chỉ định lưu tại key
Example:
Redis::zRem('key_sorted_set', [1, 2, 3]);
zCardO(1)Trả về số lượng phần tử lưu tại key
Example:
Redis::zCard('key_sorted_set');

Kết Luận

Redis thường được sử dụng trong trường hợp tối ưu perfomance của ứng dụng, bài viết này đã giới thiệu 1 số câu lệnh cơ bản sử dụng redis trong laravel

Cảm ơn tất cả mọi người đã đọc.

Related Posts