laravel的redis连接io问题

新手上路,请多包涵

问题1:
laravel里,app('redis')->connection($connName);这个连接是会产生io的吧。

如果一个laravel php接口代码里,多次执行app('redis')->connection($connName),就是多次io对不,

例如:

static function a()
{

app('redis')->connection($connName);
....

}

static function b()
{

app('redis')->connection($connName);
....

}

static function c()
{

app('redis')->connection($connName);
....

}

function total()
{

self::a();
self::b();
self::c();

}

问题2:
redis->get前,是否有必要执行redis->exist()

例如:
if(redis->exist(key)) {
$value = redis->get(key)
...
}

阅读 2.2k
1 个回答
多次执行app('redis')->connection($connName),就是多次io对不

不对,因为 Laravel 会把这些连接保存起来。具体代码\Illuminate\Redis\RedisManager::connection

    public function connection($name = null)
    {
        $name = $name ?: 'default';

        if (isset($this->connections[$name])) {
            return $this->connections[$name];
        }

        return $this->connections[$name] = $this->configure(
            $this->resolve($name), $name
        );
    }

RedisServiceProvider 中, redis 使用的单例进行绑定 的,即单个请求中,只有第一次使用的时候会创建连接。

$this->app->singleton('redis', function ($app) {
    $config = $app->make('config')->get('database.redis', []);

    return new RedisManager($app, Arr::pull($config, 'client', 'phpredis'), $config);
});
redis->get前,是否有必要执行redis->exist()

这是根据你业务的需要来确定的,非必要的话不建议。

根据 Redis 文档描述, get 的时间复杂度是 O(1) ,exist 是 O(N) 其中N是键检查的数量(也就是说单个键的话,都是 O(1))。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题