热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

laravelredismysql_键值对存储系统Redis在Laravel中的使用

键值对存储系统Redis在Laravel中的使用由学院君创建于2年前,最后更新于10个月前版本号#219390views5likes0collects简介Redis是一个开源的、高

键值对存储系统 Redis 在 Laravel 中的使用

由 学院君 创建于2年前, 最后更新于 10个月前

版本号 #2

19390 views

5 likes

0 collects

0b17c2014ec15e798c22433396728035.png

简介

Redis 是一个开源的、高级的键值对存储系统,经常被用作数据结构服务器,因为其支持字符串、Hash、列表、集合和有序集合等数据结构。

在 Laravel 中使用 Redis 之前,需要通过 Composer 安装 predis/predis 包:

composer require predis/predis

作为替代方案,你还可以通过 PECL 安装 PHP 扩展 PhpRedis。该扩展安装起来更麻烦,但是对重度使用 Redis 的应用而言性能更好。

配置

应用的 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 服务器需要一个名字并指定该 Redis 服务器使用的主机和接口。

配置集群

如果应用使用了 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 集群,需要在 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

注:如果你通过 PECL 安装了 PHP 扩展 PhpRedis,需要在配置文件 config/app.php 中重命名 Redis 别名。

要使用 PhpRedis 扩展,需要在Redis 配置中将 client 选项修改为 phpredis,该选项位于配置文件 config/database:

'redis' => [

'client' => 'phpredis',

// Rest of Redis configuration...

],

除了默认的 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 门面上的方法来与 Redis 进行交互,该门面支持动态方法,所以你可以调用任何 Redis 命令,对应命令将会直接传递给 Redis,在本例中,我们通过调用 Redis 门面上的 get 方法来调用 Redis 上的 GET 命令:

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Redis;

use App\Http\Controllers\Controller;

class UserController extends Controller{

/**

* 显示指定用户属性

*

* @param int $id

* @return Response

* @translator laravelacademy.org

*/

public function showProfile($id)

{

$user = Redis::get('user:profile:'.$id);

return view('user.profile', ['user' => $user]);

}

}

当然,如上所述,可以在 Redis 门面上调用任何 Redis 命令。Laravel 使用魔术方法将命令传递给 Redis 服务器,所以只需简单传递参数和 Redis 命令如下:

Redis::set('name', 'Taylor');

$values = Redis::lrange('names', 5, 10);

此外,还可以使用 command 方法传递命令到服务器,该方法接收命令名作为第一个参数,参数值数组作为第二个参数:

$values = Redis::command('lrange', ['name', 5, 10]);

注:如果要使用 Redis 作为缓存驱动,可以参考缓存文档;如果要使用 Redis 作为队列驱动,可以参考队列文档。

使用多个 Redis 连接

你可以通过调用 Redis::connection 方法获取Redis 实例:

$redis = Redis::connection();

这将会获取默认 Redis 服务器实例,你还可以传递服务器名或集群名到 connection 方法来获取 Redis 配置中定义的指定服务器或集群:

$redis = Redis::connection('my-connection');

管道命令

当你需要在一次操作中发送多个命令到服务器的时候应该使用管道,pipeline 方法接收一个参数:接收 Redis 实例的闭包。你可以将所有 Redis 命令发送到这个 Redis 实例,然后这些命令会在一次操作中被执行:

Redis::pipeline(function ($pipe) {

for ($i &#61; 0; $i <1000; $i&#43;&#43;) {

$pipe->set("key:$i", $i);

}

});

发布/订阅

Redis 还提供了调用 Redis 的 publish 和 subscribe 命令的接口。这些 Redis 命令允许你在给定“频道”监听消息&#xff0c;你可以从另外一个应用发布消息到这个频道&#xff0c;甚至使用其它编程语言&#xff0c;从而允许你在不同的应用/进程之间轻松通信。

首先&#xff0c;让我们使用 subscribe 方法通过 Redis 在一个频道上设置监听器。由于调用 subscribe 方法会开启一个常驻进程&#xff0c;我们将在 Artisan 命令中调用该方法&#xff1a;

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\Redis;

class RedisSubscribe extends Command

{

/**

* 控制台命令名称

*

* &#64;var string

*/

protected $signature &#61; &#39;redis:subscribe&#39;;

/**

* 控制台命令描述

*

* &#64;var string

*/

protected $description &#61; &#39;Subscribe to a Redis channel&#39;;

/**

* 执行控制台命令

*

* &#64;return mixed

*/

public function handle()

{

Redis::subscribe([&#39;test-channel&#39;], function($message) {

echo $message;

});

}

}

现在&#xff0c;我们可以使用 publish 发布消息到该频道&#xff1a;

Route::get(&#39;publish&#39;, function () {

// 路由逻辑...

Redis::publish(&#39;test-channel&#39;, json_encode([&#39;foo&#39; &#61;> &#39;bar&#39;]));

});

通配符订阅

使用 psubscribe 方法&#xff0c;你可以订阅到一个通配符定义的频道&#xff0c;这在所有相应频道上获取所有消息时很有用。$channel 名将会作为第二个参数传递给提供的回调闭包&#xff1a;

Redis::psubscribe([&#39;*&#39;], function($message, $channel) {

echo $message;

});

Redis::psubscribe([&#39;users.*&#39;], function($message, $channel) {

echo $message;

});

注&#xff1a;要使用 Redis 作为事件广播服务端&#xff0c;可以参考广播文档。



推荐阅读
  • Ansibleplaybook roles安装redis实例(学习笔记二十九)
    1、相关redis参数:2、templatesredis.conf配置相关参数:daemonizeyespidfilevarrunredis_{{red ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
author-avatar
让牙齿晒晒太阳诱惑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有