predis 설정 방법이 매우 느린 이유는 무엇입니까?

WBOY
풀어 주다: 2016-09-11 11:34:15
원래의
1197명이 탐색했습니다.

내 코드는 다음과 같습니다.

<code><?php
/**
 * User: mh
 * Date: 2016/9/9
 * Time: 19:12
 */

namespace Session;

use SessionHandlerInterface;

class RedisSession implements SessionHandlerInterface {
    private $redis;
    // 连接Redis
    private function connect() {
        if(!$this->redis) {
            $cfg = [
                'scheme' => env('REDIS_SCHEME', 'tcp'),
                'host' => env('REDIS_HOST', '127.0.0.1'),
                'port' => env('REDIS_PORT', 6379)
            ];
            $this->redis = new \Predis\Client($cfg);
        }
    }
    /**
     * Close the session
     * @since 5.4.0
     */
    public function close()
    {
        return true;
    }

    /**
     * Destroy a session
     * @return boolean
     * @since 5.4.0
     */
    public function destroy($session_id)
    {
        $this->connect();
        $this->redis->del($session_id);
        return true;
    }

    /**
     * Cleanup old sessions
     * @return boolean
     * @since 5.4.0
     */
    public function gc($maxlifetime)
    {
        return true;
    }

    /**
     * Initialize session
     * @since 5.4.0
     */
    public function open($save_path, $sessionName)
    {
        return true;
    }

    /**
     * Read session data
     * @return string
     * @since 5.4.0
     */
    public function read($session_id)
    {
        $this->connect();
        if($this->redis->exists($session_id)) {
            $value = $this->redis->get($session_id);
            return $value ? ($value) : '';
        } else {
            $expire = configure('Ymf.Account.expire');
            $this->redis->setex($session_id, $expire, '');
            return '';
        }
        return '';
    }

    /**
     * Write session data
     * @return boolean
     * @since 5.4.0
     */
    public function write($session_id, $sessionData)
    {
        $this->connect();
        file_put_contents(__DIR__ . '/../../write.log', "写入{$sessionData}\r\n", FILE_APPEND);
        if($this->redis->set("flf", "hfl")) {
            return true;
        } else {
            return false;
        }
    }
}</code>
로그인 후 복사
로그인 후 복사

문제 해결을 위해서만 $this->redis->set 방법이 매우 느린 것을 발견했습니다. 이유는 무엇입니까? . . .

답글 내용:

내 코드는 다음과 같습니다.

<code><?php
/**
 * User: mh
 * Date: 2016/9/9
 * Time: 19:12
 */

namespace Session;

use SessionHandlerInterface;

class RedisSession implements SessionHandlerInterface {
    private $redis;
    // 连接Redis
    private function connect() {
        if(!$this->redis) {
            $cfg = [
                'scheme' => env('REDIS_SCHEME', 'tcp'),
                'host' => env('REDIS_HOST', '127.0.0.1'),
                'port' => env('REDIS_PORT', 6379)
            ];
            $this->redis = new \Predis\Client($cfg);
        }
    }
    /**
     * Close the session
     * @since 5.4.0
     */
    public function close()
    {
        return true;
    }

    /**
     * Destroy a session
     * @return boolean
     * @since 5.4.0
     */
    public function destroy($session_id)
    {
        $this->connect();
        $this->redis->del($session_id);
        return true;
    }

    /**
     * Cleanup old sessions
     * @return boolean
     * @since 5.4.0
     */
    public function gc($maxlifetime)
    {
        return true;
    }

    /**
     * Initialize session
     * @since 5.4.0
     */
    public function open($save_path, $sessionName)
    {
        return true;
    }

    /**
     * Read session data
     * @return string
     * @since 5.4.0
     */
    public function read($session_id)
    {
        $this->connect();
        if($this->redis->exists($session_id)) {
            $value = $this->redis->get($session_id);
            return $value ? ($value) : '';
        } else {
            $expire = configure('Ymf.Account.expire');
            $this->redis->setex($session_id, $expire, '');
            return '';
        }
        return '';
    }

    /**
     * Write session data
     * @return boolean
     * @since 5.4.0
     */
    public function write($session_id, $sessionData)
    {
        $this->connect();
        file_put_contents(__DIR__ . '/../../write.log', "写入{$sessionData}\r\n", FILE_APPEND);
        if($this->redis->set("flf", "hfl")) {
            return true;
        } else {
            return false;
        }
    }
}</code>
로그인 후 복사
로그인 후 복사

문제 해결을 위해서만 $this->redis->set 방법이 매우 느린 것을 발견했습니다. 이유는 무엇입니까? . . .

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿