Redis
Redis là một thành phần mặc định của webman và sử dụng illuminate/redis, đây là thư viện redis của Laravel, sử dụng cách tương tự như Laravel.
Trước khi sử dụng illuminate/redis
, bạn cần cài đặt extension redis cho php-cli
.
Chú ý
Sử dụng lệnhphp -m | grep redis
để kiểm tra xemphp-cli
đã cài đặt extension redis hay chưa. Lưu ý rằng, ngay cả khi bạn đã cài đặt extension redis chophp-fpm
, điều này không có nghĩa là bạn có thể sử dụng nó trongphp-cli
, vìphp-cli
vàphp-fpm
là hai ứng dụng khác nhau và có thể sử dụng các tập tin cấu hìnhphp.ini
khác nhau. Sử dụng lệnhphp --ini
để xem tập tin cấu hìnhphp.ini
nào được sử dụng bởiphp-cli
.
Cài đặt
composer require -W illuminate/redis illuminate/events
Sau khi cài đặt, bạn cần restart (không phải reload) để áp dụng.
Cấu hình
Tệp cấu hình redis nằm trong config/redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
]
];
Ví dụ
<?php
namespace app\controller;
use support\Request;
use support\Redis;
class UserController
{
public function db(Request $request)
{
$key = 'test_key';
Redis::set($key, rand());
return response(Redis::get($key));
}
}
Redis Interface
Redis::append($key, $value)
Redis::bitCount($key)
Redis::decr($key, $value)
Redis::decrBy($key, $value)
Redis::get($key)
Redis::getBit($key, $offset)
Redis::getRange($key, $start, $end)
Redis::getSet($key, $value)
Redis::incr($key, $value)
Redis::incrBy($key, $value)
Redis::incrByFloat($key, $value)
Redis::mGet(array $keys)
Redis::getMultiple(array $keys)
Redis::mSet($pairs)
Redis::mSetNx($pairs)
Redis::set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null)
Redis::setBit($key, $offset, $value)
Redis::setEx($key, $ttl, $value)
Redis::pSetEx($key, $ttl, $value)
Redis::setNx($key, $value)
Redis::setRange($key, $offset, $value)
Redis::strLen($key)
Redis::del(...$keys)
Redis::exists(...$keys)
Redis::expire($key, $ttl)
Redis::expireAt($key, $timestamp)
Redis::select($dbIndex)
Tương đương với:
$redis = Redis::connection('default');
$redis->append($key, $value)
$redis->bitCount($key)
$redis->decr($key, $value)
$redis->decrBy($key, $value)
$redis->get($key)
$redis->getBit($key, $offset)
...
Chú ý
Hãy cẩn thận khi sử dụng giao diệnRedis::select($db)
, vì webman là một framework ở bộ nhớ không thay đổi, nếu một yêu cầu sử dụngRedis::select($db)
để chuyển đổi cơ sở dữ liệu, điều này sẽ ảnh hưởng đến các yêu cầu khác sau này. Đối với nhiều cơ sở dữ liệu, nên sử dụng cấu hình$db
khác nhau cho các kết nối Redis khác nhau.
Sử dụng nhiều kết nối Redis
Ví dụ tệp cấu hình config/redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
]
Mặc định, kết nối được sử dụng là kết nối được cấu hình trong default
, bạn có thể sử dụng phương thức Redis::connection()
để chọn kết nối redis nào sẽ được sử dụng.
$redis = Redis::connection('cache');
$redis->get('test_key');
Cấu hình Cluster
Nếu ứng dụng của bạn sử dụng cụm máy chủ Redis, bạn nên sử dụng khóa cụm (clusters
) trong tệp cấu hình Redis để xác định các cụm này:
return [
'clusters' => [
'default' => [
[
'host' => 'localhost',
'password' => null,
'port' => 6379,
'database' => 0,
],
],
],
];
Mặc định, cụm có thể thực hiện phân mảnh trên các nút, cho phép bạn tạo ra một cụm nơi có nhiều bộ nhớ có sẵn. Lưu ý rằng chia sẻ khách hàng không xử lý trường hợp thất bại, vì vậy nó chủ yếu được sử dụng để lấy dữ liệu cache từ cơ sở dữ liệu chính khác. Nếu bạn muốn sử dụng cụm gốc Redis, bạn cần quy định như sau trong khóa options trong tệp cấu hình:
return [
'options' => [
'cluster' => 'redis',
],
'clusters' => [
// ...
],
];
Lệnh Pipeline
Khi bạn cần gửi nhiều lệnh đến máy chủ trong một lần thao tác, bạn nên sử dụng lệnh Pipeline. Phương thức pipeline nhận một closure của một Redis instance. Bạn có thể gửi tất cả các lệnh đến Redis, tất cả chúng sẽ được thực hiện trong một lần thao tác:
Redis::pipeline(function ($pipe) {
for ($i = 0; $i < 1000; $i++) {
$pipe->set("key:$i", $i);
}
});