>  기사  >  백엔드 개발  >  Yii2-Redis 사용 참고 사항 - 캐시

Yii2-Redis 사용 참고 사항 - 캐시

WBOY
WBOY원래의
2016-08-08 09:19:521201검색

며칠 전에 Redis를 간략하게 배웠고, 이제 프로젝트에 사용할 준비가 되었습니다. 현재 Yii2 프레임워크를 사용하고 있으며 공식 홈페이지에서 Redis를 검색한 결과 yii2-redis 확장자를 찾았습니다.

설치 후 사용하기 매우 쉽습니다. common/config/main.php 파일을 열고 다음과 같이 수정하세요.

'cache' => [
    // 'class' => 'yii\caching\FileCache',
    'class' => 'yii\redis\Cache',
],
'redis' => [
    'class' => 'yii\redis\Connection',
    'hostname' => 'localhost',
    'port' => 6379,
    'database' => 0,
],

자, 이제 Yii의 캐시를 넘겨받기 위해 redis가 사용되었습니다. 캐시의 사용법은 이전과 동일합니다. , 하지만 버그의 버그로 간주되지 않는 것이 하나 있으므로 작은 함정이므로 나중에 이야기하겠습니다.

먼저 캐시를 테스트해 보겠습니다.

Yii::$app->cache->set('test', 'hehe..');
echo Yii::$app->cache->get('test'), "\n";

Yii::$app->cache->set('test1', 'haha..', 5);
echo '1 ', Yii::$app->cache->get('test1'), "\n";
sleep(6);
echo '2 ', Yii::$app->cache->get('test1'), "\n";

테스트 결과를 살펴보겠습니다.

이전과 동일하게 사용하시면 문제 없습니다. .

그런데 방금 말씀드린 것처럼 벌레가 아닌 벌레가 있는데 그게 무슨 작은 구멍인가요?
redis를 직접 사용하여 캐시를 인수하는 경우 정상적으로 사용하면 문제가 없지만 만료 시간 값이 int 범위를 초과하면 redis에서 오류를 보고합니다.
저에게 함정이었던 yii2-admin을 사용했는데, 30일 동안(2592000초) 캐시했기 때문이고, Redis 캐시 시간 정밀도는 기본적으로 밀리초를 사용하므로 시간은 2592000000밀리초입니다.
redis의 만료 시간은 int 유형만 가능합니다. Cache.php의 PHP는 별도의 처리 없이 강제로 int로 변환되므로 -1702967296이 되고 오류가 보고됩니다.

그러나 그림과 같이 redis 명령줄 바로 아래에는 음수가 없습니다.

하지만 상관없습니다. 고치는 것이 매우 간단합니다. 초 단위로 변경할 수 있습니다.
vendor/yiisoft/yii2-redis/Cache.php 라인 133을 열고 다음 코드로 수정합니다.

protected function setValue($key, $value, $expire)
{
    if ($expire == 0) {
        return (bool) $this->redis->executeCommand('SET', [$key, $value]);
    } else {
        // $expire = (int) ($expire * 1000); // 单位默认为毫秒
        // return (bool) $this->redis->executeCommand('SET', [$key, $value, 'PX', $expire]);

        $expire = +$expire > 0 ? $expire : 0; // 防止负数
        return (bool) $this->redis->executeCommand('SET', [$key, $value, 'EX', $expire]); // 按秒缓存
    }
}


괜찮습니다.

좋아요, 오늘은 이것을 공유하고 내일과 모레는 Connection, ActiveRecord 및 yii2-redis의 함정에 대해 이야기하겠습니다.

위 내용은 관련 내용을 포함하여 Yii2-Redis - Cache 사용 시 주의사항을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.