Laravel5.8
  1. 安装配置及核心内容
  2. 框架基础
  3. 进阶知识
  4. 数据库相关
    1. Laravel - 数据库相关 - 简介与配置
    2. Laravel - 数据库相关 - 原生 SQL 操作
    3. Laravel - 数据库相关 - 查询构造器
    4. Laravel - 数据库相关 - 分页
    5. Laravel - 数据库相关 - 数据迁移
    6. Laravel - 数据库相关 - 数据填充
    7. Laravel - 数据库相关 - redis
    8. Laravel - Eloquent 模型 - 入门
    9. Laravel - Eloquent 模型 - 查询作用域(全局,本地,动态)
    10. Laravel - Eloquent 模型 - 事件与监听方法
    11. Laravel - Eloquent 模型 - 关联关系
    12. Laravel - Eloquent 模型 - 关联查询
    13. Laravel - Eloquent 模型 - 访问器和修改器

Laravel - 数据库相关 - redis

程序员日记      2019-09-05

说明

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


安装与配置

安装predis

composer require predis/predis

配置

Redis 配置位于配置文件config/database.php

配置示例

'redis' => [
    'client' => 'predis',
    '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),
    ],
]

配置集群

通过 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' => [
        // ...
    ],
],

与 Redis 交互

通过调用 Redis 门面上的方法来与 Redis 进行交互

示例

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

说明

以上例子调用了Redis 门面上的 get 方法来调用 Redis 上的 GET 命令


可以在 Redis 门面上调用任何 Redis 命令。

Laravel 使用魔术方法将命令传递给 Redis 服务器

示例

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


使用 command 方法传递命令

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


获取redis实例

$redis = Redis::connection();


获取redis其他连接实例

Redis::connection('my-connection');

发布/订阅

Redis 还提供了调用 Redis 的 publish subscribe 命令的接口。

这些 Redis命令允许你在给定“频道”监听消息,

你可以从另外一个应用发布消息到这个频道,

甚至使用其它编程语言,从而允许你在不同的应用/进程之间轻松通信。


设置订阅器

我们可以使用 subscribe 方法通过 Redis 在一个频道上设置监听器

<?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;
});