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ạp | Mô tả |
keys | O(N) | Trả về tất cả các key phù hợp pattern |
Example:Redis::keys('*'); | ||
expire | O(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ạp | Mô tả |
set | O(1) | Thiết lập dữ liệu cho key |
Example: Redis::set('key', 'value'); | ||
setNx | O(1) | Thiết lập dữ liệu cho key nếu key đó không tồn tại |
Example: Redis::setNx('key', 'value'); | ||
get | O(1) | Get giá trị của key |
Example: Redis::get('key'); | ||
del | O(N) | Xóa 1 hoặc nhiều key |
Example: Redis::del('key', 'key1'); | ||
incr | O(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'); | ||
decr | O(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ả |
lPush | O(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"]); | ||
rPush | O(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"]); | ||
lPop | O(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); | ||
rPop | O(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); | ||
lRange | O(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); | ||
lLen | O(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ạp | Mô tả |
hSet | O(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"); | ||
hSetNx | O(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"); | ||
hGet | O(1) | Trả về giá trị field trong hàm băm tại key chỉ định |
Example:Redis::hGet('key_hash', "field"); | ||
hGetAll | O(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: hExists | O(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"); | ||
hDel | O(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'); | ||
hKeys | O(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'); | ||
hmSet | O(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" ]); | ||
hmGet | O(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"]); | ||
hLen | O(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ạp | Mô tả |
sAdd | O(N) | Thêm các phần tử vào key chỉ định |
Example: Redis::sAdd('key_set', "php", "js") | ||
sMembers | O(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'); | ||
sIsMember | O(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', | ||
sPop | O(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); | ||
sRem | O(N) | Xóa các phần tử được chỉ định tại key |
Example:Redis::sRem('key_set', ["php", "js"]); | ||
sCard | O(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ạp | Mô tả |
zAdd | O(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 ]); | ||
zRange | O(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); | ||
zRangeByScore | O(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); | ||
zRem | O(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]); | ||
zCard | O(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.