[ Laravel 5.3 文档 ] 数据库 —— Redis

   2016-10-07 0
核心提示:1、简介Redis是一个开源的、高级的键值对存储系统,经常被用作数据结构服务器,因为其支持字符串、Hash、列表、集合和有序集合等数据结构。在Laravel中使用Redis之前,需要通过Composer安装predis/predis包:composer require predis/predis配置应用的Redis配

1、简介

Redis 是一个开源的、高级的键值对存储系统,经常被用作数据结构服务器,因为其支持字符串、Hash、列表、集合和有序集合等数据结构。在Laravel中使用Redis之前,需要通过Composer安装 predis/predis 包:

composer require predis/predis

配置

应用的Redis配置位于配置文件 config/database.php 。在这个文件中,可以看到包含被应用使用的Redis服务器的 redis 数组:

'redis' => [

    'cluster' => false,

    'default' => [
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ],

],

默认服务器配置可以满足开发需要,不过,你可以基于自己的环境修改该数组。配置文件中定义的每个Redis服务器需要一个名字并指定该Redis服务器使用的主机和接口。

cluster 选项告知Laravel Redis 客户端在多个Redis节点间执行客户端分片,从而形成节点池并创建大量有效的RAM。然而,客户端分片并不处理故障转移,所以,非常适合从另一个主数据存储那里获取有效的缓存数据。

此外,你可以在Redis连接定义中定义options数组值,从而允许你指定一系列Predis 客户端选项

如果Redis服务器要求认证信息,你可以通过添加 password 配置项到Redis服务器配置数组来提供密码。

注意:如果你通过PECL安装PHP的Redis扩展,需要在 config/app.php 文件中修改Redis的别名。

2、与Redis交互

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

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Redis;
use App\Http\Controllers\Controller;

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 门面上调用任何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('other');

管道 命令

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

Redis::pipeline(function ($pipe) {
    for ($i = 0; $i < 1000; $i++) {
        $pipe->set("key:$i", $i);
    }
});

3、 发布 / 订阅

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

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

<?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 () {
    // 路由逻辑...
    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;
});
 
标签: Redis Laravel
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • RedisTemplate 常用API+事务+陷阱+序列化+pipeline+LUA
    RedisTemplate 常用API+事务+陷阱+序列化+pipel
    https://www.jianshu.com/p/7bf5dc61ca06/https://blog.csdn.net/qq_34021712/article/details/79606551https://www.jianshu.com/p/c9f5718e58f0dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/depe
    03-08
  • Redis调用Lua脚本并测试
    一、为什么使用Lua脚本    为了一次通信执行多个Redis命令,我们可以用pipline ,但是多个命令间没有逻辑联系 。    Lua脚本可以一次通信执行多个Redis命令,而且内部可以写自己的逻辑,整个脚本执行是原子性的。 二、命令行调用Lua脚本EVAL script numk
    02-09
  • = 2.2.2 系统默认 ruby 版本过低,导致 Redis 接口安装失败">redis requires Ruby version >= 2.2.2 系统默认 ruby 版本
    = 2.2.2 系统默认 ruby 版本过低,导致 Redis
    输入命令 " gem install redis " 出现 " ERROR:  Error installing redis redis requires Ruby version = 2.2.2. " ,如下图: 根据错误信息可知,Redis需要Ruby版本不能小于2.2.2版本,查看系统默认当前 ruby 版本,输入命令 " ruby -v " , 如下图:当
    02-09
  • Lua 是一个小巧的脚本语言
    

Redis进阶实践之七Redis和Lua初步整合使用
    Lua 是一个小巧的脚本语言 Redis进阶实践
    Redis进阶实践之七Redis和Lua初步整合使用一、引言        Redis学了一段时间了,基本的东西都没问题了。从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功能。
    02-09
  • 扩展Redis的Lua调用方式 redis+lua
    Redis是支持Lua脚本的,但是我以为并不方便。1. SCRIPT LOAD一个字符串拿到一个SHA,首先这个Lua script脚本就很难拿到。Linux一般用cat什么的。但是你作为PHP怎么拿到Lua的代码呢?2. 记录一个SHA,而且SHA是随着Lua代码的变化而变化的。而且给EVALSHA的时候
    02-09
  • redis+lua库存扣减和冲正
    package spring;import org.redisson.Redisson;import org.redisson.api.RScript;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import java.util.ArrayList;import java.util.List;import static org.redisson.api.RScript.Mod
    02-09
  • Nginx 内嵌lua脚本,结合Redis使用
    0x00 Nginx 内嵌Lua脚本有下面特点:20k个并发连接Lua脚本能够在Nignx 11个层次的不同层次发挥作用,扩展Ngnix功能Lua速度极快(寄存器指令)0x01 应用场景在web server端做请求过滤处理(如:WAF、Anti CC等)0x02 简单配置过程測试环境Ubuntu Server 14.04.
    02-09
  • 使用lua脚本和jedis实现redis的hmsetnx命令,操
    redis中set系列命令(包括set,hset等等),基本上都包括两个版本,纯粹的set和setnx, setnx即set not exist, 也就是只有Key不存在时才会执行set, 而不会覆盖原有的值。但是hmset这个命令,包括redis本身,jedis都没有提供nx版本的支持。当然,hset这个命令是有
    02-09
  • 使用Nginx Lua实现redis高性能http接口
    使用Nginx Lua实现redis高性能http接口时间 2015-01-27 18:26:53峰云就她了原文http://xiaorui.cc/2015/01/27/使用nginx-lua实现redis高性能http接口/主题 Lua Nginx HTTP某些时候用python实现的接口性能不够强劲,需要换种方法来提高性能,这不就用lua试试。
    02-09
  • Php+Redis 实现Redis提供的lua脚本功能
    ?phprequire_once "predis-0.8/autoload.php";$config['schema'] = 'tcp';$config['host']= "192.168.1.7";$config['port'] = 6379;$redis = new Predis\Client($config);class wode extends Predis\Command\Sc
    02-09
点击排行