Redis | 数据库 |《Laravel 5.6 中文文档 5.6》| Laravel China 社区


本站和网页 https://learnku.com/docs/laravel/5.6/redis/1402#configuration 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Redis | 数据库 |《Laravel 5.6 中文文档 5.6》| Laravel China 社区
Laravel
话题列表
社区 Wiki
优质外文
招聘求职
Laravel 实战教程
社区文档
登录
注册
Laravel 5.6 中文文档
展开或关闭
前言
翻译说明
发行说明
升级说明
贡献导引
入门指南
安装
配置信息
文件夹结构
Homestead
Valet
部署
核心架构
请求周期
服务容器
服务提供者
Facades
Contracts
基础功能
路由
中间件
CSRF 保护
控制器
请求
响应
视图
URL
Session
表单验证
错误
日志
前端开发
Blade 模板
本地化
前端指南
编辑资源 Mix
安全相关
用户认证
Passport OAuth 认证
用户授权
加密解密
哈希
重置密码
综合话题
Artisan 命令行
广播系统
缓存系统
集合
事件系统
文件存储
辅助函数
邮件发送
消息通知
扩展包开发
队列
任务调度
数据库
快速入门
查询构造器
分页
数据库迁移
数据填充
Redis
Eloquent ORM
快速入门
模型关联
Eloquent 集合
修改器
API 资源
序列化
测试相关
快速入门
HTTP 测试
浏览器测试 Dusk
数据库测试
测试模拟器
官方扩展包
Cashier 交易工具包
Envoy 部署工具
Horizon
Scout 全文搜索
Socialite 社会化登录
Laravel
首页
Laravel
Go
PHP
Vue.js
Python
Java
MySQL
Rust
LK
Elasticsearch
F2E 前端
Server
程序员
Database
DevTools
Computer Science
手机开发
AdonisJS
社区
Wiki
教程
Laravel 实战教程首页
《L01 Laravel 教程 - Web 开发实战入门》
《L02 Laravel 教程 - Web 开发实战进阶》
《L03 Laravel 教程 - 实战构架 API 服务器》
《L04 Laravel 教程 - 微信小程序从零到发布》
《L05 Laravel 教程 - 电商实战》
《L06 Laravel 教程 - 电商进阶》
《LX1 Laravel / PHP 扩展包视频教程》
《LX2 PHP 扩展包实战教程 - 从入门到发布》
《L07 Laravel 教程 - Laravel TDD 测试实战》
《LX3 Laravel 性能优化入门》
《LX4 Laravel / PHP 五分钟视频》
文档
社区文档首页
《Laravel 中文文档》
《Laravel 速查表》
《PHP 代码简洁之道》
《Laravel 编码技巧》
《Dcat Admin 中文文档》
《Laravel Nova 中文文档》
《Lumen 中文文档》
《Dingo API 中文文档》
《 Laravel 项目开发规范》
《构建 Laravel 开发环境》
登录
注册
微信登录
提交改进
Redis
5.6
9.x
8.5
8.x
7.x
6.x
5.8
5.7
5.6
5.5
5.4
5.3
5.2
5.1
Laravel 5.6 中文文档
未匹配的标注
本文档最新版为 9.x,旧版本可能放弃维护,推荐阅读最新版!
Redis
简介
配置
Predis
PhpRedis
Redis 交互
管道命令
发布与订阅
简介
Redis 是一个开源的,高级键值对存储数据库。由于它包含 字符串、哈希、列表、集合 和 有序集合 这些数据类型,所以它通常被称为数据结构服务器。
在使用 Laravel 的 Redis 之前,你需要通过 Composer 安装 predis/predis 扩展包:
composer require predis/predis
或者,你可以通过 PECL 安装 PhpRedis PHP 扩展。这个扩展安装起来比较复杂,但对于大量使用 Redis 的应用程序来说可能会产生更好的性能。
配置
Laravel 应用的 Redis 配置都在配置文件 config/database.php 中。在这个文件里,你可以看到 redis 数组里面包含了应用程序使用的 Redis 服务器:
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
默认的服务器配置应该足以进行开发。当然,你也可以根据使用的环境来随意更改这个数组。只需在配置文件中给每个 Redis 服务器指定名称、host 和 port 即可。
集群配置
如果你的程序使用 redis 服务器集群,你应该在 redis 配置文件中使用 clusters 键来定义这些集群:
'redis' => [
'client' => 'predis',
'clusters' => [
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
],
],
默认情况下,集群可以实现跨节点间客户端共享,允许你实现节点池以及创建大量可用内存。这里要注意,客户端共享不会处理失败的情况;因此,这个功能主要适用于从另一个主数据库获取的缓存数据。如果要使用 redis 原生集群,要在配置文件的 options 键中如下指定:
'redis' => [
'client' => 'predis',
'options' => [
'cluster' => 'redis',
],
'clusters' => [
// ...
],
],
Predis
除了默认的 Host、port、database 和 password 这些服务配置选项之外,Predis 还支持为每个 redis 服务器定义其它的 连接参数 。如果要使用这些额外的配置选项,就将它们添加到配置文件 config/database.php 的 Redis 服务器配置中:
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 60,
],
PhpRedis
{note} 如果你是通过 PECL 安装 Redis PHP 扩展,就需要重命名 config/app.php 文件里 Redis 的别名。
如果要使用 Phpredis 扩展,就需要将配置文件 config/database.php 中 Redis 配置的 client 选项更改为 phpredis:
'redis' => [
'client' => 'phpredis',
// 其余的 Redis 配置...
],
除了默认的 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 交互
你可以调用 Redis facade上的各种方法来与 Redis 进行交互。Redis facade 支持动态方法,这意味着你可以在 facade 上调用任何 Redis 命令 ,还能将该命令直接传递给 Redis。在本例中,通过调用 Redis facade 上的 get 方法来调用 Redis 的 GET 命令:
<?php
namespace 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 方法会启动一个长时间运行的进程:
<?php
namespace 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 () {
// Route logic...
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;
});
本文章首发在 LearnKu.com 网站上。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
原文地址:https://learnku.com/docs/laravel/5.6/red...
译文地址:https://learnku.com/docs/laravel/5.6/red...
上一篇
下一篇
Markdown 文本
纠错改进
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:2
推荐文章:
更多推荐...
博客
10个常见的Redis面试"刁难"问题
22
9个月前
博客
记 Laravel Observer 导致 Redis 队列异常
25
24
1年前
博客
面试:Redis必知必会20问
39
1年前
博客
redis应用系列二:异步消息队列:生产/消费模式实现及优化
13
1年前
博客
redis应用系列一:分布式锁正确实现姿势
64
24
1年前
博客
月半谈(一)redis-分布式锁与应用
22
12
1年前
讨论数量: 9
发起讨论
只看当前版本
miaotiao
3年前
(已经解决) Laravel Redis predis 切换到 phpredis
个点赞 | 26 个回复 |
问答
| 课程版本 5.7
Taris
4年前
什麼情況下會使用 Redis???
个点赞 | 4 个回复 |
问答
| 课程版本 5.6
cxywsw
2个月前
提个小小的建议,redis支持设置默认过期时间
个点赞 | 6 个回复 |
分享
| 课程版本 9.x
Curtain123
6个月前
短信登录
个点赞 | 3 个回复 |
代码速记
| 课程版本 8.5
梦之马
4年前
长时间 Redis:subscribe 会断开怎么解决
个点赞 | 3 个回复 |
问答
| 课程版本 5.5
397948486
2年前
Laravel Redis 切换 phpredis 遇到 read error on connection
个点赞 | 2 个回复 |
分享
| 课程版本 5.7
kiyoma
4年前
配置里的'database' => 0 是什么意思?
个点赞 | 2 个回复 |
问答
| 课程版本 5.5
mr_zhang
4年前
Redis?
个点赞 | 1 个回复 |
问答
| 课程版本 5.6
蜡笔小新
3年前
为什么我用 phpredis,设置 read_timeout 等于-1,报错
个点赞 | 0 个回复 |
问答
| 课程版本 5.7
社区赞助商
成为赞助商
关于 LearnKu
LearnKu 是终身编程者的修道场
做最专业、严肃的技术论坛
LearnKu 诞生的故事
资源推荐
《社区使用指南》
《文档撰写指南》
《LearnKu 社区规范》
《提问的智慧》
服务提供商
其他信息
成为版主
所有测验
联系站长(反馈建议)
粤ICP备18099781号-6
粤公网安备 44030502004330号
违法和不良信息举报
由 Summer 设计和编码 ❤
请登录
提交
忘记密码?
or
注册
第三方账号登录
微信登录
GitHub 登录
内容举报
匿名举报,为防止滥用,仅管理员可见举报者。
我要举报该,理由是:
垃圾广告:恶意灌水、广告、推广等内容
无意义内容:测试、灌水、文不对题、消极内容、文章品质太差等
违规内容:色情、暴利、血腥、敏感信息等
不友善内容:人身攻击、挑衅辱骂、恶意行为
科学上网:翻墙、VPN、Shadowsocks,政策风险,会被关站!
不懂提问:提问太随意,需要再做一遍《提问的智慧》测验
随意提问:提问没有发布在社区问答分类下
排版混乱:没有合理使用 Markdown 编写文章,未使用代码高亮
内容结构混乱:逻辑不清晰,内容混乱,难以阅读
标题随意:标题党、标题不释义
尊重版权:分享付费课程、破解软件(付费),侵犯作者劳动成果
其他理由:请补充说明
举报
取消