【laravel7.x中文文档】Redis
Redis
?
簡介
Redis?是一個開源的,高級鍵值對存儲數據庫。由于它包含?字符串,哈希,列表,集合,和?有序集合?這些數據類型,所以它通常被稱為數據結構服務器。
在將 Redis 與 Laravel 一起使用前,我們鼓勵你通過 PECL 安裝并使用?PhpRedis?PHP 擴展。盡管擴展安裝起來更復雜,但對于大量使用 Redis 的應用程序可能會產生更好的性能。
或者,您可以通過 Composer 安裝?predis/predis?包:
composer require predis/predis
注意:Predis 已被該軟件包的原始作者遺棄,并可能在將來的版本中從 Laravel 中刪除。
配置
您的 Laravel 應用的 Redis 配置文件都在?config/database.php?中。在這個文件里,你可以看到一個?redis?數組里包含了應用程序所使用的 Redis 服務器信息:
'redis' => ['client' => env('REDIS_CLIENT', 'phpredis'),'default' => ['host' => env('REDIS_HOST', '127.0.0.1'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => env('REDIS_DB', 0),],'cache' => ['host' => env('REDIS_HOST', '127.0.0.1'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => env('REDIS_CACHE_DB', 1),],],
默認的服務器配置應該足以進行開發。當然,你也可以根據使用的環境來隨意更改這個數組。只需在配置文件中給每個 Redis 服務器指定名稱、host(主機)和 port(端口)即可。
集群配置
如果你的應用使用 Redis 服務器集群,你應該在 Redis 配置文件中使用?clusters?鍵來定義這些集群:
'redis' => ['client' => env('REDIS_CLIENT', 'phpredis'),'clusters' => ['default' => [['host' => env('REDIS_HOST', 'localhost'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => 0,],],],],
默認情況下,集群可以在節點上實現客戶端分片,允許你實現節點池以及創建大量可用內存。這里要注意,客戶端共享不會處理失敗的情況;因此,這個功能主要適用于從另一個主數據庫獲取的緩存數據。如果要使用 Redis 原生集群,需要在配置文件下的?options?鍵中做出如下指定:
'redis' => ['client' => env('REDIS_CLIENT', 'phpredis'),'options' => ['cluster' => env('REDIS_CLUSTER', 'redis'),],'clusters' => [// ...],],
Predis
要使用 Predis 擴展,需要將環境變量從?phpredis?選項修改為?predis:
'redis' => ['client' => env('REDIS_CLIENT', 'predis'),// Rest of Redis configuration...
],
除了默認的?host?,?port?,?database?和?password?這些服務配置選項外,Predis 還支持為每個 Redis 服務器定義其它的鏈接參數?connection parameters。如果要使用這些額外的配置選項,可以將以下配置添加到 Redis 服務器的配置文件?config/database.php?中:
'default' => ['host' => env('REDIS_HOST', 'localhost'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => 0,'read_write_timeout' => 60,
],
PhpRedis
要使用 PhpRedis 擴展,需要將配置文件?config/database.php?中 Redis 配置的?REDIS_CLIENT?選項修改為?phpredis:
'redis' => ['client' => env('REDIS_CLIENT', 'phpredis'),// 其余 Redis 配置...
],
如果你希望?PhpRedis?擴展和?Redis?Facade 共存,需要在配置文件?config/app.php?的別名配置中修改?Illuminate\Support\Facades\Redis?Facade 別名,如修改為:?RedisManager,以保證不與 Redis 類產生命名沖突。
'RedisManager' => Illuminate\Support\Facades\Redis::class,
除了默認的?host,?port,?database?和?password?這些服務配置選項外,PhpRedis 還支持以下幾個額外的連接參數:?persistent,?prefix,?read_timeout?和?timeout?。你可以將這些配置選項添加到配置文件?config/database.php?中 Redis 服務配置項下:
'default' => ['host' => env('REDIS_HOST', 'localhost'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => 0,'read_timeout' => 60,
],
Redis Facade
為了避免與 Redis PHP 擴展本身發生類名沖突,需要在配置文件?config/app.php?刪除或重命名?Illuminate\Support\Facades\Redis?Facade 別名。通常情況下,建議完全刪除?Redis?facade,在使用 Redis PHP 擴展時,通過完整的類聲明進行引用。
Redis 交互
你可以通過調用?Redis?facade?上的各種方法來與 Redis 交互。Redis?facade 支持動態方法,意味著你可以在 facade 上調用各種?Redis 命令?,命令將直接傳遞給 Redis。在示例中,將通過?Redis?facade 上的?get?方法來調用?Redis?上的?GET?命令:
<?phpnamespace App\Http\Controllers;use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redis;class UserController extends Controller
{/*** 顯示給定用戶的配置文件。** @param int $id* @return Response*/public function showProfile($id){$user = Redis::get('user:profile:'.$id);return view('user.profile', ['user' => $user]);}
}
如上所述,你可以在?Redis?facade 上調用任意 Redis 命令。Laravel 使用魔術方法將命令傳遞給 Redis 服務器,因此只需傳遞 Redis 命令所需的參數即可:
Redis::set('name', 'Taylor');$values = Redis::lrange('names', 5, 10);
或者,你也可以使用?command?方法將命令傳遞給服務器,它接受命令的名稱作為其第一個參數,并將值的數組作為其第二個參數:
$values = Redis::command('lrange', ['name', 5, 10]);
使用多個 Redis 連接
你可以通過?Redis::connection?方法獲得 Redis 實例:
$redis = Redis::connection();
這會返回一個默認的 Redis 實例。你可以傳遞連接或者集群名稱給?connection?方法來獲取在 Redis 配置中特定服務或集群:
$redis = Redis::connection('my-connection');
管道命令
當你需要在一個操作中給服務器發送很多命令時,推薦你使用管道命令。?pipeline?方法接受一個 Redis 實例的?閉包?。你可以將所有的命令發送給 Redis 實例,它們都會在一個操作中執行完成:
Redis::pipeline(function ($pipe) {for ($i = 0; $i < 1000; $i++) {$pipe->set("key:$i", $i);}
});
發布與訂閱
Laravel 為 Redis 的?publish?及?subscribe?提供了方便的接口。這些 Redis 命令讓你可以監聽指定「頻道」上的消息。你可以從另一個應用程序發布消息給另一個應用程序,甚至使用其它編程語言,讓應用程序和進程之間能夠輕松進行通信。
首先,我們使用?subscribe?方法設置頻道監聽器。我們將這個方法調用放在?Artisan 命令中,因為調用?subscribe?方法會啟動一個長時間運行的進程:
<?phpnamespace App\Console\Commands;use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;class RedisSubscribe extends Command
{/*** 控制臺命令的名稱和簽名。** @var string*/protected $signature = 'redis:subscribe';/*** 控制臺命令說明。** @var string*/protected $description = 'Subscribe to a Redis channel';/*** 執行控制臺命令。** @return mixed*/public function handle(){Redis::subscribe(['test-channel'], function ($message) {echo $message;});}
}
現在我們可以使用?publish?方法將消息發布到頻道:
Route::get('publish', function () {// 路由...Redis::publish('test-channel', json_encode(['foo' => 'bar']));
});
通配符訂閱
使用?psubscribe?方法,你能夠訂閱一個通配符頻道,可以用來從所有頻道上獲取所有的消息。這個?$channel?名稱將作為第二個參數傳遞給提供的回調?閉包:
Redis::psubscribe(['*'], function ($message, $channel) {echo $message;
});Redis::psubscribe(['users.*'], function ($message, $channel) {echo $message;
});
總結
以上是生活随笔為你收集整理的【laravel7.x中文文档】Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Laravel Redis操作大全
- 下一篇: Redis安装与卸载