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相关推荐

  1. lavaral中文手册_【laravel7.x中文文档】路由

    路由 [TOC] 基本路由 构建基本路由只需要一个 URI 与一个 闭包 ,这里提供了一个非常简单优雅定义路由的方法: Route::get('foo', function () { return ' ...

  2. GitHub 中文文档正式发布

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 中国作为全球最大的人口大国,所属开发者在 GitHub 上的占比自 ...

  3. PHP-redis中文文档 1

    PHP-redis中文文档 phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https:/ ...

  4. Spring Boot中文文档

    1.5.2.RELEASE Part I. Spring Boot 文档 本节简要介绍了Spring Boot文档,是整个文档的参考指南. 您可以完整阅读本参考指南,或者如果您不感兴趣的话可以跳过该部 ...

  5. Springboot 中文文档 —— Actuator

    文章目录 1 **启用** 2 **端点(endpoints)** 2.1 启用端点 2.2 公开端点 2.3 保护HTTP端点 2.4 配置端点缓存 2.5 配置 /actuator 路径 2.6 ...

  6. spring-data-redis 简介、中文文档、中英对照文档 下载

    spring-data-redis 文档 下载链接(含jar包.源码.pom) 组件名称 中文-文档-下载链接 中英对照-文档-下载链接 spring-data-redis-1.7.5.RELEASE ...

  7. Spring Cloud Alibaba 官方中文文档

    Spring Cloud Alibaba 官方中文文档 1. 介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用服务的必需组件,方便开发者通 ...

  8. 后端开发常用官方中文文档整理

    后端开发常用官方文档.中文文档整理 名称 链接 Spring Framework 中文 Springboot 中文 Mybatis3 中文 Mybatis-plus 中文 JAVA 语言 中文 Mys ...

  9. PyTorch官方中文文档:torch.optim 优化器参数

    内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...

最新文章

  1. select sqlite 唯一_SQLite中的SELECT子句使用通配符
  2. 第三篇——第二部分——第三文 配置SQL Server镜像——域环境
  3. 思想解读:TF-A(ATF)中栈指针和栈内存的设计思想解读
  4. Google Analytics 跟踪代码安装后状态总是显示'未安装跟踪代码'
  5. ssms 缺少索引信息_MySQL3:索引
  6. 在 iOS创建 第一个Cordova 项目
  7. 计算机网络实验:VLAN Practice Lab Setup in Packet Tracer and Configure DHCP Server for multiple VLAN
  8. 网络协议:超时与重传机制
  9. Linux设备树相关函数
  10. Linux之DHCP+tftp+syslinux+PXE+Cobbler
  11. 用Python库PySimpleGUI制作自动化办公小软件
  12. 第一篇博客:A+B Problem
  13. 【前端GUI】—— 网站美工必须掌握的PS知识点思维导图
  14. php 输出html 总结
  15. Pytroch相关操作(1)
  16. golang指数运算
  17. java开发知识总结1
  18. 3步上架iOS APP【2022最新教程】
  19. 谷歌浏览器前端调试技巧01——使用F12清除缓存
  20. docker 容器启动提示,ipv4不能被使用

热门文章

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
  2. 2022-2028年中国非溶聚丁苯橡胶行业市场竞争态势及发展前景分析报告
  3. 2022-2028年中国金属薄膜行业市场深度监测及投资潜力研究报告
  4. python with上下文管理
  5. 做人留一线,日后好相见
  6. ifelse的命令空间
  7. Python zip() 函数
  8. SLAM图优化g2o
  9. 使用TENSORRT和NVIDIA-DOCKER部署深部神经网络
  10. TinyML-TVM是如何驯服Tiny的(上)