Laravel 不添加配置文件实现 Redis 切换库和设置 key 前缀

由于不同项目需要跨 Redis 库来实现相关数据操作。
正常情况下,我们可以通过 config/database.php 来增加相应配置选项即可。如果不想通过添加文件来实现跨库操作可简单如下操作:

use Illuminate\Support\Facades\Redis;

// 默认连接配置
$redis = Redis::connection('default');
// 设置连接 2 库
$redis->select(2);
// 设置 key 的前缀
$redis->setOption(\Redis::OPT_PREFIX, 'prefix:2'); 
// 操作 2 库的相关数据
$a = $redis->get($key2);
// 设置连接 1 库
$redis->select(1);
// 设置 key 的前缀
$redis->setOption(\Redis::OPT_PREFIX,'prefix:1');
// 操作 1 库的相关数据
$b = $redis->get($key1);

这是偷懒的写法,但是简单,不用去配置。

另外,还有很多操作都类似,在对象中调用一个不可访问方法时调用:
src/Illuminate/Redis/Connections/Connection.php


    /**
     * Pass other method calls down to the underlying client.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        if (static::hasMacro($method)) {
            return $this->macroCall($method, $parameters);
        }

        return $this->command($method, $parameters);
    }

最后谢谢来自 Rache1 建议:

最好不要让你的代码充满魔法,Redis::connection 是会保存连接的,如果你在 A 方法设置了,忘了重置,到 B 方法的时候,还会保持旧的设置,这会让代码充满未知性。

如果有更好的解决方法请私信或留言,欢迎交流!

本作品采用《CC 协议》,转载必须注明作者和本文链接
Keep it Simple, Stupid
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

REDIS OPT 提供了常量,应该使用 \Redis::OPT_PREFIX 而不是使用魔法数字 2 ,因为在未来有可能会变化,你直接写个 2 别人也无法推断出到底这个 2 代表什么。

其次,最好不要让你的代码充满魔法,Redis::connection 是会保存连接的,如果你在 A 方法设置了,忘了重置,到 B 方法的时候,还会保持旧的设置,这会让代码充满未知性。

2年前 评论
笑逐颜凯 (楼主) 2年前
笑逐颜凯 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!